<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>camera_calibration [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_calibration.html">Calibration</a> / <a href="toc_calibration_monocular.html">Monocular</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">camera_calibration</span><span data-if="c" style="display:none;">T_camera_calibration</span><span data-if="cpp" style="display:none;">CameraCalibration</span><span data-if="dotnet" style="display:none;">CameraCalibration</span><span data-if="python" style="display:none;">camera_calibration</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">camera_calibration</span><span data-if="c" style="display:none;">T_camera_calibration</span><span data-if="cpp" style="display:none;">CameraCalibration</span><span data-if="dotnet" style="display:none;">CameraCalibration</span><span data-if="python" style="display:none;">camera_calibration</span></code> — Determine all camera parameters by a simultaneous minimization
process.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>camera_calibration</b>( :  : <a href="#NX"><i>NX</i></a>, <a href="#NY"><i>NY</i></a>, <a href="#NZ"><i>NZ</i></a>, <a href="#NRow"><i>NRow</i></a>, <a href="#NCol"><i>NCol</i></a>, <a href="#StartCamParam"><i>StartCamParam</i></a>, <a href="#NStartPose"><i>NStartPose</i></a>, <a href="#EstimateParams"><i>EstimateParams</i></a> : <a href="#CameraParam"><i>CameraParam</i></a>, <a href="#NFinalPose"><i>NFinalPose</i></a>, <a href="#Errors"><i>Errors</i></a>)</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>T_camera_calibration</b>(const Htuple <a href="#NX"><i>NX</i></a>, const Htuple <a href="#NY"><i>NY</i></a>, const Htuple <a href="#NZ"><i>NZ</i></a>, const Htuple <a href="#NRow"><i>NRow</i></a>, const Htuple <a href="#NCol"><i>NCol</i></a>, const Htuple <a href="#StartCamParam"><i>StartCamParam</i></a>, const Htuple <a href="#NStartPose"><i>NStartPose</i></a>, const Htuple <a href="#EstimateParams"><i>EstimateParams</i></a>, Htuple* <a href="#CameraParam"><i>CameraParam</i></a>, Htuple* <a href="#NFinalPose"><i>NFinalPose</i></a>, Htuple* <a href="#Errors"><i>Errors</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>CameraCalibration</b>(const HTuple&amp; <a href="#NX"><i>NX</i></a>, const HTuple&amp; <a href="#NY"><i>NY</i></a>, const HTuple&amp; <a href="#NZ"><i>NZ</i></a>, const HTuple&amp; <a href="#NRow"><i>NRow</i></a>, const HTuple&amp; <a href="#NCol"><i>NCol</i></a>, const HTuple&amp; <a href="#StartCamParam"><i>StartCamParam</i></a>, const HTuple&amp; <a href="#NStartPose"><i>NStartPose</i></a>, const HTuple&amp; <a href="#EstimateParams"><i>EstimateParams</i></a>, HTuple* <a href="#CameraParam"><i>CameraParam</i></a>, HTuple* <a href="#NFinalPose"><i>NFinalPose</i></a>, HTuple* <a href="#Errors"><i>Errors</i></a>)</code></p>
<p>
<code><a href="HCamPar.html">HCamPar</a> <a href="HCamPar.html">HCamPar</a>::<b>CameraCalibration</b>(const HTuple&amp; <a href="#NX"><i>NX</i></a>, const HTuple&amp; <a href="#NY"><i>NY</i></a>, const HTuple&amp; <a href="#NZ"><i>NZ</i></a>, const HTuple&amp; <a href="#NRow"><i>NRow</i></a>, const HTuple&amp; <a href="#NCol"><i>NCol</i></a>, const HPoseArray&amp; <a href="#NStartPose"><i>NStartPose</i></a>, const HTuple&amp; <a href="#EstimateParams"><i>EstimateParams</i></a>, HPoseArray* <a href="#NFinalPose"><i>NFinalPose</i></a>, HTuple* <a href="#Errors"><i>Errors</i></a>) const</code></p>
<p>
<code><a href="HCamPar.html">HCamPar</a> <a href="HCamPar.html">HCamPar</a>::<b>CameraCalibration</b>(const HTuple&amp; <a href="#NX"><i>NX</i></a>, const HTuple&amp; <a href="#NY"><i>NY</i></a>, const HTuple&amp; <a href="#NZ"><i>NZ</i></a>, const HTuple&amp; <a href="#NRow"><i>NRow</i></a>, const HTuple&amp; <a href="#NCol"><i>NCol</i></a>, const HPose&amp; <a href="#NStartPose"><i>NStartPose</i></a>, const HTuple&amp; <a href="#EstimateParams"><i>EstimateParams</i></a>, HPose* <a href="#NFinalPose"><i>NFinalPose</i></a>, double* <a href="#Errors"><i>Errors</i></a>) const</code></p>
<p>
<code>static <a href="HCamPar.html">HCamPar</a> <a href="HPose.html">HPose</a>::<b>CameraCalibration</b>(const HTuple&amp; <a href="#NX"><i>NX</i></a>, const HTuple&amp; <a href="#NY"><i>NY</i></a>, const HTuple&amp; <a href="#NZ"><i>NZ</i></a>, const HTuple&amp; <a href="#NRow"><i>NRow</i></a>, const HTuple&amp; <a href="#NCol"><i>NCol</i></a>, const HCamPar&amp; <a href="#StartCamParam"><i>StartCamParam</i></a>, const HPoseArray&amp; <a href="#NStartPose"><i>NStartPose</i></a>, const HTuple&amp; <a href="#EstimateParams"><i>EstimateParams</i></a>, HPoseArray* <a href="#NFinalPose"><i>NFinalPose</i></a>, HTuple* <a href="#Errors"><i>Errors</i></a>)</code></p>
<p>
<code><a href="HCamPar.html">HCamPar</a> <a href="HPose.html">HPose</a>::<b>CameraCalibration</b>(const HTuple&amp; <a href="#NX"><i>NX</i></a>, const HTuple&amp; <a href="#NY"><i>NY</i></a>, const HTuple&amp; <a href="#NZ"><i>NZ</i></a>, const HTuple&amp; <a href="#NRow"><i>NRow</i></a>, const HTuple&amp; <a href="#NCol"><i>NCol</i></a>, const HCamPar&amp; <a href="#StartCamParam"><i>StartCamParam</i></a>, const HTuple&amp; <a href="#EstimateParams"><i>EstimateParams</i></a>, HPose* <a href="#NFinalPose"><i>NFinalPose</i></a>, double* <a href="#Errors"><i>Errors</i></a>) const</code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>CameraCalibration</b>(<a href="HTuple.html">HTuple</a> <a href="#NX"><i>NX</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NY"><i>NY</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NZ"><i>NZ</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NRow"><i>NRow</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NCol"><i>NCol</i></a>, <a href="HTuple.html">HTuple</a> <a href="#StartCamParam"><i>startCamParam</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NStartPose"><i>NStartPose</i></a>, <a href="HTuple.html">HTuple</a> <a href="#EstimateParams"><i>estimateParams</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#CameraParam"><i>cameraParam</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#NFinalPose"><i>NFinalPose</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Errors"><i>errors</i></a>)</code></p>
<p>
<code><a href="HCamPar.html">HCamPar</a> <a href="HCamPar.html">HCamPar</a>.<b>CameraCalibration</b>(<a href="HTuple.html">HTuple</a> <a href="#NX"><i>NX</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NY"><i>NY</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NZ"><i>NZ</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NRow"><i>NRow</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NCol"><i>NCol</i></a>, <a href="HPose.html">HPose[]</a> <a href="#NStartPose"><i>NStartPose</i></a>, <a href="HTuple.html">HTuple</a> <a href="#EstimateParams"><i>estimateParams</i></a>, out <a href="HPose.html">HPose[]</a> <a href="#NFinalPose"><i>NFinalPose</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Errors"><i>errors</i></a>)</code></p>
<p>
<code><a href="HCamPar.html">HCamPar</a> <a href="HCamPar.html">HCamPar</a>.<b>CameraCalibration</b>(<a href="HTuple.html">HTuple</a> <a href="#NX"><i>NX</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NY"><i>NY</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NZ"><i>NZ</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NRow"><i>NRow</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NCol"><i>NCol</i></a>, <a href="HPose.html">HPose</a> <a href="#NStartPose"><i>NStartPose</i></a>, <a href="HTuple.html">HTuple</a> <a href="#EstimateParams"><i>estimateParams</i></a>, out <a href="HPose.html">HPose</a> <a href="#NFinalPose"><i>NFinalPose</i></a>, out double <a href="#Errors"><i>errors</i></a>)</code></p>
<p>
<code>static <a href="HCamPar.html">HCamPar</a> <a href="HPose.html">HPose</a>.<b>CameraCalibration</b>(<a href="HTuple.html">HTuple</a> <a href="#NX"><i>NX</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NY"><i>NY</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NZ"><i>NZ</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NRow"><i>NRow</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NCol"><i>NCol</i></a>, <a href="HCamPar.html">HCamPar</a> <a href="#StartCamParam"><i>startCamParam</i></a>, <a href="HPose.html">HPose[]</a> <a href="#NStartPose"><i>NStartPose</i></a>, <a href="HTuple.html">HTuple</a> <a href="#EstimateParams"><i>estimateParams</i></a>, out <a href="HPose.html">HPose[]</a> <a href="#NFinalPose"><i>NFinalPose</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Errors"><i>errors</i></a>)</code></p>
<p>
<code><a href="HCamPar.html">HCamPar</a> <a href="HPose.html">HPose</a>.<b>CameraCalibration</b>(<a href="HTuple.html">HTuple</a> <a href="#NX"><i>NX</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NY"><i>NY</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NZ"><i>NZ</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NRow"><i>NRow</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NCol"><i>NCol</i></a>, <a href="HCamPar.html">HCamPar</a> <a href="#StartCamParam"><i>startCamParam</i></a>, <a href="HTuple.html">HTuple</a> <a href="#EstimateParams"><i>estimateParams</i></a>, out <a href="HPose.html">HPose</a> <a href="#NFinalPose"><i>NFinalPose</i></a>, out double <a href="#Errors"><i>errors</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>camera_calibration</b>(<a href="#NX"><i>nx</i></a>: Sequence[Union[float, int]], <a href="#NY"><i>ny</i></a>: Sequence[Union[float, int]], <a href="#NZ"><i>nz</i></a>: Sequence[Union[float, int]], <a href="#NRow"><i>nrow</i></a>: Sequence[Union[float, int]], <a href="#NCol"><i>ncol</i></a>: Sequence[Union[float, int]], <a href="#StartCamParam"><i>start_cam_param</i></a>: Sequence[Union[float, int, str]], <a href="#NStartPose"><i>nstart_pose</i></a>: Sequence[Union[float, int]], <a href="#EstimateParams"><i>estimate_params</i></a>: Sequence[str]) -&gt; Tuple[Sequence[Union[float, int, str]], Sequence[Union[float, int]], Sequence[float]]</code></p>
<p>
<code>def <b>camera_calibration_s</b>(<a href="#NX"><i>nx</i></a>: Sequence[Union[float, int]], <a href="#NY"><i>ny</i></a>: Sequence[Union[float, int]], <a href="#NZ"><i>nz</i></a>: Sequence[Union[float, int]], <a href="#NRow"><i>nrow</i></a>: Sequence[Union[float, int]], <a href="#NCol"><i>ncol</i></a>: Sequence[Union[float, int]], <a href="#StartCamParam"><i>start_cam_param</i></a>: Sequence[Union[float, int, str]], <a href="#NStartPose"><i>nstart_pose</i></a>: Sequence[Union[float, int]], <a href="#EstimateParams"><i>estimate_params</i></a>: Sequence[str]) -&gt; Tuple[Sequence[Union[float, int, str]], Sequence[Union[float, int]], float]</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p><code><span data-if="hdevelop" style="display:inline">camera_calibration</span><span data-if="c" style="display:none">camera_calibration</span><span data-if="cpp" style="display:none">CameraCalibration</span><span data-if="com" style="display:none">CameraCalibration</span><span data-if="dotnet" style="display:none">CameraCalibration</span><span data-if="python" style="display:none">camera_calibration</span></code> performs the calibration of a single camera.
For this, known 3D model points (with coordinates <a href="#NX"><i><code><span data-if="hdevelop" style="display:inline">NX</span><span data-if="c" style="display:none">NX</span><span data-if="cpp" style="display:none">NX</span><span data-if="com" style="display:none">NX</span><span data-if="dotnet" style="display:none">NX</span><span data-if="python" style="display:none">nx</span></code></i></a>,
<a href="#NY"><i><code><span data-if="hdevelop" style="display:inline">NY</span><span data-if="c" style="display:none">NY</span><span data-if="cpp" style="display:none">NY</span><span data-if="com" style="display:none">NY</span><span data-if="dotnet" style="display:none">NY</span><span data-if="python" style="display:none">ny</span></code></i></a>, <a href="#NZ"><i><code><span data-if="hdevelop" style="display:inline">NZ</span><span data-if="c" style="display:none">NZ</span><span data-if="cpp" style="display:none">NZ</span><span data-if="com" style="display:none">NZ</span><span data-if="dotnet" style="display:none">NZ</span><span data-if="python" style="display:none">nz</span></code></i></a>) are projected into the image and the sum
of the squared distances between the projected 3D-coordinates and
their corresponding image point coordinates (<a href="#NRow"><i><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></i></a>,
<a href="#NCol"><i><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></i></a>) is minimized.
</p>
<p>As initial values for the minimization process the external
(<a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a>) and internal (<a href="#StartCamParam"><i><code><span data-if="hdevelop" style="display:inline">StartCamParam</span><span data-if="c" style="display:none">StartCamParam</span><span data-if="cpp" style="display:none">StartCamParam</span><span data-if="com" style="display:none">StartCamParam</span><span data-if="dotnet" style="display:none">startCamParam</span><span data-if="python" style="display:none">start_cam_param</span></code></i></a>) camera
parameters are used.
Thereby <a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a> is an ordered tuple with all initial values for
the external camera parameters given in the form
<span title="1" style="vertical-align:-0.217917em" class="math"><!-- Created by MetaPost 1.902 on 2023.05.15:2033 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="3.42407em" height="1.01195em" viewBox="0 0 54.785156 16.191269">
<!-- Original BoundingBox: -27.392578 -8.095642 27.392578 8.095627 -->
  <defs>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_99">
      <path style="fill-rule: evenodd;" d="M438.000000 -383.000000C402.000000 -377.000000,387.000000 -349.000000,387.000000 -327.000000C387.000000 -300.000000,408.000000 -290.000000,426.000000 -290.000000C448.000000 -290.000000,483.000000 -306.000000,483.000000 -354.000000C483.000000 -422.000000,405.000000 -441.000000,351.000000 -441.000000C201.000000 -441.000000,62.000000 -303.000000,62.000000 -164.000000C62.000000 -78.000000,122.000000 10.000000,247.000000 10.000000C416.000000 10.000000,495.000000 -89.000000,495.000000 -103.000000C495.000000 -109.000000,486.000000 -120.000000,478.000000 -120.000000C472.000000 -120.000000,470.000000 -118.000000,462.000000 -110.000000C384.000000 -18.000000,267.000000 -18.000000,249.000000 -18.000000C177.000000 -18.000000,145.000000 -67.000000,145.000000 -129.000000C145.000000 -158.000000,159.000000 -267.000000,211.000000 -336.000000C249.000000 -385.000000,301.000000 -413.000000,351.000000 -413.000000C365.000000 -413.000000,413.000000 -411.000000,438.000000 -383.000000"></path>
    </g>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_115">
      <path style="fill-rule: evenodd;" d="M431.000000 -376.000000C405.000000 -370.000000,389.000000 -349.000000,389.000000 -329.000000C389.000000 -306.000000,409.000000 -297.000000,422.000000 -297.000000C432.000000 -297.000000,470.000000 -303.000000,470.000000 -354.000000C470.000000 -419.000000,398.000000 -441.000000,337.000000 -441.000000C181.000000 -441.000000,153.000000 -326.000000,153.000000 -295.000000C153.000000 -258.000000,174.000000 -234.000000,188.000000 -222.000000C214.000000 -202.000000,232.000000 -198.000000,301.000000 -186.000000C322.000000 -182.000000,386.000000 -170.000000,386.000000 -120.000000C386.000000 -103.000000,375.000000 -65.000000,333.000000 -40.000000C294.000000 -18.000000,245.000000 -18.000000,233.000000 -18.000000C193.000000 -18.000000,136.000000 -27.000000,113.000000 -60.000000C146.000000 -64.000000,168.000000 -89.000000,168.000000 -117.000000C168.000000 -142.000000,150.000000 -154.000000,129.000000 -154.000000C100.000000 -154.000000,71.000000 -131.000000,71.000000 -87.000000C71.000000 -27.000000,135.000000 10.000000,232.000000 10.000000C416.000000 10.000000,450.000000 -116.000000,450.000000 -155.000000C450.000000 -247.000000,349.000000 -265.000000,312.000000 -272.000000C303.000000 -274.000000,278.000000 -278.000000,272.000000 -280.000000C235.000000 -287.000000,217.000000 -308.000000,217.000000 -330.000000C217.000000 -353.000000,235.000000 -380.000000,257.000000 -394.000000C284.000000 -411.000000,319.000000 -413.000000,336.000000 -413.000000C357.000000 -413.000000,409.000000 -410.000000,431.000000 -376.000000"></path>
    </g>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_119">
      <path style="fill-rule: evenodd;" d="M526.000000 -319.000000C533.000000 -346.000000,545.000000 -394.000000,545.000000 -399.000000C545.000000 -419.000000,529.000000 -431.000000,512.000000 -431.000000C493.000000 -431.000000,475.000000 -419.000000,469.000000 -402.000000C466.000000 -394.000000,456.000000 -352.000000,449.000000 -327.000000C435.000000 -270.000000,435.000000 -268.000000,420.000000 -212.000000C407.000000 -157.000000,405.000000 -149.000000,404.000000 -120.000000C408.000000 -100.000000,400.000000 -81.000000,376.000000 -51.000000C363.000000 -35.000000,343.000000 -18.000000,309.000000 -18.000000C270.000000 -18.000000,219.000000 -32.000000,219.000000 -110.000000C219.000000 -161.000000,247.000000 -235.000000,267.000000 -286.000000C284.000000 -330.000000,288.000000 -339.000000,288.000000 -356.000000C288.000000 -404.000000,247.000000 -441.000000,193.000000 -441.000000C92.000000 -441.000000,47.000000 -305.000000,47.000000 -288.000000C47.000000 -275.000000,61.000000 -275.000000,64.000000 -275.000000C78.000000 -275.000000,79.000000 -280.000000,82.000000 -291.000000C107.000000 -374.000000,150.000000 -413.000000,190.000000 -413.000000C207.000000 -413.000000,215.000000 -402.000000,215.000000 -378.000000C215.000000 -355.000000,206.000000 -333.000000,201.000000 -320.000000C144.000000 -174.000000,144.000000 -154.000000,144.000000 -123.000000C144.000000 -5.000000,251.000000 10.000000,305.000000 10.000000C324.000000 10.000000,373.000000 10.000000,418.000000 -57.000000C441.000000 -12.000000,496.000000 10.000000,557.000000 10.000000C646.000000 10.000000,690.000000 -67.000000,710.000000 -108.000000C753.000000 -192.000000,780.000000 -317.000000,780.000000 -363.000000C780.000000 -438.000000,737.000000 -442.000000,730.000000 -442.000000C704.000000 -442.000000,676.000000 -415.000000,676.000000 -389.000000C676.000000 -372.000000,686.000000 -364.000000,693.000000 -358.000000C717.000000 -338.000000,730.000000 -310.000000,730.000000 -278.000000C730.000000 -265.000000,688.000000 -18.000000,561.000000 -18.000000C480.000000 -18.000000,480.000000 -90.000000,480.000000 -107.000000C480.000000 -134.000000,484.000000 -150.000000,498.000000 -207.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmbx10_80">
      <path style="fill-rule: evenodd;" d="M289.000000 -302.000000L466.000000 -302.000000C605.000000 -302.000000,721.000000 -374.000000,721.000000 -491.000000C721.000000 -601.000000,622.000000 -686.000000,456.000000 -686.000000L39.000000 -686.000000L39.000000 -639.000000L147.000000 -639.000000L147.000000 -47.000000L39.000000 -47.000000L39.000000 -0.000000L218.000000 -0.000000L77.000000 -3.000000L175.000000 -3.000000L218.000000 -3.000000L261.000000 -3.000000L359.000000 -3.000000L397.000000 -0.000000L397.000000 -47.000000L289.000000 -47.000000M417.000000 -343.000000L283.000000 -343.000000L283.000000 -639.000000L418.000000 -639.000000C568.000000 -639.000000,568.000000 -563.000000,568.000000 -491.000000C568.000000 -420.000000,568.000000 -343.000000,417.000000 -343.000000"></path>
    </g>
  </defs>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,0.623413 5.708572)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_99"></use>
    <use xlink:href="#GLYPHcmmi7_99" x="3.573800"></use>
    <use xlink:href="#GLYPHcmmi7_115" x="7.147601"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,18.830048 12.704590)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmbx10_80"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,31.360809 15.095642)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_119"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,40.882629 15.095642)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_99"></use>
    <use xlink:href="#GLYPHcmmi7_115" x="3.573800"></use>
  </g>
</svg></span>, where
<i>ccs</i> denotes the camera coordinate system and
<i>wcs</i> the world coordinate system (see
<a href="toc_transformations_poses.html">Transformations / Poses</a>
and <code>“Solution Guide III-C - 3D Vision”</code>).
Individual camera parameters can be explicitly
included or excluded from the minimization with
<a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a>. For a detailed description of the available
camera models, the different sets of internal camera parameters, and
general requirements for the setup, see <a href="toc_calibration.html">Calibration</a>.
</p>
<p>For a successful calibration, at least one calibration object with
accurately known metric properties is needed, e.g., a HALCON
calibration plate. Before calling <code><span data-if="hdevelop" style="display:inline">camera_calibration</span><span data-if="c" style="display:none">camera_calibration</span><span data-if="cpp" style="display:none">CameraCalibration</span><span data-if="com" style="display:none">CameraCalibration</span><span data-if="dotnet" style="display:none">CameraCalibration</span><span data-if="python" style="display:none">camera_calibration</span></code>, take a
series of images of the calibration object in different orientations
and make sure that the whole field of view or measurement volume is
covered. The success of the calibration highly depends on the
quality of the calibration object and the images. So you might want
to exercise special diligence during the acquisition of the
calibration images. See the section “How to take a set of suitable
images?” in <a href="toc_calibration.html">Calibration</a> for further details.
</p>
<p>After a successful calibration, <code><span data-if="hdevelop" style="display:inline">camera_calibration</span><span data-if="c" style="display:none">camera_calibration</span><span data-if="cpp" style="display:none">CameraCalibration</span><span data-if="com" style="display:none">CameraCalibration</span><span data-if="dotnet" style="display:none">CameraCalibration</span><span data-if="python" style="display:none">camera_calibration</span></code> returns
the optimized internal (<a href="#CameraParam"><i><code><span data-if="hdevelop" style="display:inline">CameraParam</span><span data-if="c" style="display:none">CameraParam</span><span data-if="cpp" style="display:none">CameraParam</span><span data-if="com" style="display:none">CameraParam</span><span data-if="dotnet" style="display:none">cameraParam</span><span data-if="python" style="display:none">camera_param</span></code></i></a>) and external
(<a href="#NFinalPose"><i><code><span data-if="hdevelop" style="display:inline">NFinalPose</span><span data-if="c" style="display:none">NFinalPose</span><span data-if="cpp" style="display:none">NFinalPose</span><span data-if="com" style="display:none">NFinalPose</span><span data-if="dotnet" style="display:none">NFinalPose</span><span data-if="python" style="display:none">nfinal_pose</span></code></i></a> <span title="2" style="vertical-align:-0.217917em" class="math"><!-- Created by MetaPost 1.902 on 2023.05.15:2033 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="3.42407em" height="1.01195em" viewBox="0 0 54.785156 16.191269">
<!-- Original BoundingBox: -27.392578 -8.095642 27.392578 8.095627 -->
  <defs>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_99">
      <path style="fill-rule: evenodd;" d="M438.000000 -383.000000C402.000000 -377.000000,387.000000 -349.000000,387.000000 -327.000000C387.000000 -300.000000,408.000000 -290.000000,426.000000 -290.000000C448.000000 -290.000000,483.000000 -306.000000,483.000000 -354.000000C483.000000 -422.000000,405.000000 -441.000000,351.000000 -441.000000C201.000000 -441.000000,62.000000 -303.000000,62.000000 -164.000000C62.000000 -78.000000,122.000000 10.000000,247.000000 10.000000C416.000000 10.000000,495.000000 -89.000000,495.000000 -103.000000C495.000000 -109.000000,486.000000 -120.000000,478.000000 -120.000000C472.000000 -120.000000,470.000000 -118.000000,462.000000 -110.000000C384.000000 -18.000000,267.000000 -18.000000,249.000000 -18.000000C177.000000 -18.000000,145.000000 -67.000000,145.000000 -129.000000C145.000000 -158.000000,159.000000 -267.000000,211.000000 -336.000000C249.000000 -385.000000,301.000000 -413.000000,351.000000 -413.000000C365.000000 -413.000000,413.000000 -411.000000,438.000000 -383.000000"></path>
    </g>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_115">
      <path style="fill-rule: evenodd;" d="M431.000000 -376.000000C405.000000 -370.000000,389.000000 -349.000000,389.000000 -329.000000C389.000000 -306.000000,409.000000 -297.000000,422.000000 -297.000000C432.000000 -297.000000,470.000000 -303.000000,470.000000 -354.000000C470.000000 -419.000000,398.000000 -441.000000,337.000000 -441.000000C181.000000 -441.000000,153.000000 -326.000000,153.000000 -295.000000C153.000000 -258.000000,174.000000 -234.000000,188.000000 -222.000000C214.000000 -202.000000,232.000000 -198.000000,301.000000 -186.000000C322.000000 -182.000000,386.000000 -170.000000,386.000000 -120.000000C386.000000 -103.000000,375.000000 -65.000000,333.000000 -40.000000C294.000000 -18.000000,245.000000 -18.000000,233.000000 -18.000000C193.000000 -18.000000,136.000000 -27.000000,113.000000 -60.000000C146.000000 -64.000000,168.000000 -89.000000,168.000000 -117.000000C168.000000 -142.000000,150.000000 -154.000000,129.000000 -154.000000C100.000000 -154.000000,71.000000 -131.000000,71.000000 -87.000000C71.000000 -27.000000,135.000000 10.000000,232.000000 10.000000C416.000000 10.000000,450.000000 -116.000000,450.000000 -155.000000C450.000000 -247.000000,349.000000 -265.000000,312.000000 -272.000000C303.000000 -274.000000,278.000000 -278.000000,272.000000 -280.000000C235.000000 -287.000000,217.000000 -308.000000,217.000000 -330.000000C217.000000 -353.000000,235.000000 -380.000000,257.000000 -394.000000C284.000000 -411.000000,319.000000 -413.000000,336.000000 -413.000000C357.000000 -413.000000,409.000000 -410.000000,431.000000 -376.000000"></path>
    </g>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_119">
      <path style="fill-rule: evenodd;" d="M526.000000 -319.000000C533.000000 -346.000000,545.000000 -394.000000,545.000000 -399.000000C545.000000 -419.000000,529.000000 -431.000000,512.000000 -431.000000C493.000000 -431.000000,475.000000 -419.000000,469.000000 -402.000000C466.000000 -394.000000,456.000000 -352.000000,449.000000 -327.000000C435.000000 -270.000000,435.000000 -268.000000,420.000000 -212.000000C407.000000 -157.000000,405.000000 -149.000000,404.000000 -120.000000C408.000000 -100.000000,400.000000 -81.000000,376.000000 -51.000000C363.000000 -35.000000,343.000000 -18.000000,309.000000 -18.000000C270.000000 -18.000000,219.000000 -32.000000,219.000000 -110.000000C219.000000 -161.000000,247.000000 -235.000000,267.000000 -286.000000C284.000000 -330.000000,288.000000 -339.000000,288.000000 -356.000000C288.000000 -404.000000,247.000000 -441.000000,193.000000 -441.000000C92.000000 -441.000000,47.000000 -305.000000,47.000000 -288.000000C47.000000 -275.000000,61.000000 -275.000000,64.000000 -275.000000C78.000000 -275.000000,79.000000 -280.000000,82.000000 -291.000000C107.000000 -374.000000,150.000000 -413.000000,190.000000 -413.000000C207.000000 -413.000000,215.000000 -402.000000,215.000000 -378.000000C215.000000 -355.000000,206.000000 -333.000000,201.000000 -320.000000C144.000000 -174.000000,144.000000 -154.000000,144.000000 -123.000000C144.000000 -5.000000,251.000000 10.000000,305.000000 10.000000C324.000000 10.000000,373.000000 10.000000,418.000000 -57.000000C441.000000 -12.000000,496.000000 10.000000,557.000000 10.000000C646.000000 10.000000,690.000000 -67.000000,710.000000 -108.000000C753.000000 -192.000000,780.000000 -317.000000,780.000000 -363.000000C780.000000 -438.000000,737.000000 -442.000000,730.000000 -442.000000C704.000000 -442.000000,676.000000 -415.000000,676.000000 -389.000000C676.000000 -372.000000,686.000000 -364.000000,693.000000 -358.000000C717.000000 -338.000000,730.000000 -310.000000,730.000000 -278.000000C730.000000 -265.000000,688.000000 -18.000000,561.000000 -18.000000C480.000000 -18.000000,480.000000 -90.000000,480.000000 -107.000000C480.000000 -134.000000,484.000000 -150.000000,498.000000 -207.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmbx10_80">
      <path style="fill-rule: evenodd;" d="M289.000000 -302.000000L466.000000 -302.000000C605.000000 -302.000000,721.000000 -374.000000,721.000000 -491.000000C721.000000 -601.000000,622.000000 -686.000000,456.000000 -686.000000L39.000000 -686.000000L39.000000 -639.000000L147.000000 -639.000000L147.000000 -47.000000L39.000000 -47.000000L39.000000 -0.000000L218.000000 -0.000000L77.000000 -3.000000L175.000000 -3.000000L218.000000 -3.000000L261.000000 -3.000000L359.000000 -3.000000L397.000000 -0.000000L397.000000 -47.000000L289.000000 -47.000000M417.000000 -343.000000L283.000000 -343.000000L283.000000 -639.000000L418.000000 -639.000000C568.000000 -639.000000,568.000000 -563.000000,568.000000 -491.000000C568.000000 -420.000000,568.000000 -343.000000,417.000000 -343.000000"></path>
    </g>
  </defs>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,0.623413 5.708572)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_99"></use>
    <use xlink:href="#GLYPHcmmi7_99" x="3.573800"></use>
    <use xlink:href="#GLYPHcmmi7_115" x="7.147601"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,18.830048 12.704590)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmbx10_80"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,31.360809 15.095642)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_119"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,40.882629 15.095642)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_99"></use>
    <use xlink:href="#GLYPHcmmi7_115" x="3.573800"></use>
  </g>
</svg></span>)
camera parameters of the camera. Additionally,
the root mean square error (RMSE) of the back projection of the
optimization is returned in <a href="#Errors"><i><code><span data-if="hdevelop" style="display:inline">Errors</span><span data-if="c" style="display:none">Errors</span><span data-if="cpp" style="display:none">Errors</span><span data-if="com" style="display:none">Errors</span><span data-if="dotnet" style="display:none">errors</span><span data-if="python" style="display:none">errors</span></code></i></a> (in pixels). This error
gives a general indication whether the optimization was successful.
</p>
<h3>Preparation of the calibration process</h3>
<dl class="generic">


<dt><b><b>How to extract the calibration marks in the images?</b></b></dt>
<dd>


<p>If a HALCON calibration plate is used, you can use 该算子
<a href="find_calib_object.html"><code><span data-if="hdevelop" style="display:inline">find_calib_object</span><span data-if="c" style="display:none">find_calib_object</span><span data-if="cpp" style="display:none">FindCalibObject</span><span data-if="com" style="display:none">FindCalibObject</span><span data-if="dotnet" style="display:none">FindCalibObject</span><span data-if="python" style="display:none">find_calib_object</span></code></a> to determine the coordinates of the
calibration marks in each image and to compute a rough estimate for
the external camera parameters. Using HALCON calibration plates with
rectangularly arranged marks (see <a href="gen_caltab.html"><code><span data-if="hdevelop" style="display:inline">gen_caltab</span><span data-if="c" style="display:none">gen_caltab</span><span data-if="cpp" style="display:none">GenCaltab</span><span data-if="com" style="display:none">GenCaltab</span><span data-if="dotnet" style="display:none">GenCaltab</span><span data-if="python" style="display:none">gen_caltab</span></code></a>), a combination
of the two operators <a href="find_caltab.html"><code><span data-if="hdevelop" style="display:inline">find_caltab</span><span data-if="c" style="display:none">find_caltab</span><span data-if="cpp" style="display:none">FindCaltab</span><span data-if="com" style="display:none">FindCaltab</span><span data-if="dotnet" style="display:none">FindCaltab</span><span data-if="python" style="display:none">find_caltab</span></code></a> and
<a href="find_marks_and_pose.html"><code><span data-if="hdevelop" style="display:inline">find_marks_and_pose</span><span data-if="c" style="display:none">find_marks_and_pose</span><span data-if="cpp" style="display:none">FindMarksAndPose</span><span data-if="com" style="display:none">FindMarksAndPose</span><span data-if="dotnet" style="display:none">FindMarksAndPose</span><span data-if="python" style="display:none">find_marks_and_pose</span></code></a> will have the same effect. In both
cases, the hereby obtained values can directly be used as initial
values for the external camera parameters (<a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a>).
</p>
<p>Obviously, images in which the segmentation of the calibration plate
(<a href="find_caltab.html"><code><span data-if="hdevelop" style="display:inline">find_caltab</span><span data-if="c" style="display:none">find_caltab</span><span data-if="cpp" style="display:none">FindCaltab</span><span data-if="com" style="display:none">FindCaltab</span><span data-if="dotnet" style="display:none">FindCaltab</span><span data-if="python" style="display:none">find_caltab</span></code></a>) has failed or the calibration marks have not
been determined successfully by <a href="find_marks_and_pose.html"><code><span data-if="hdevelop" style="display:inline">find_marks_and_pose</span><span data-if="c" style="display:none">find_marks_and_pose</span><span data-if="cpp" style="display:none">FindMarksAndPose</span><span data-if="com" style="display:none">FindMarksAndPose</span><span data-if="dotnet" style="display:none">FindMarksAndPose</span><span data-if="python" style="display:none">find_marks_and_pose</span></code></a> or
<a href="find_calib_object.html"><code><span data-if="hdevelop" style="display:inline">find_calib_object</span><span data-if="c" style="display:none">find_calib_object</span><span data-if="cpp" style="display:none">FindCalibObject</span><span data-if="com" style="display:none">FindCalibObject</span><span data-if="dotnet" style="display:none">FindCalibObject</span><span data-if="python" style="display:none">find_calib_object</span></code></a> should not be used.
</p>
</dd>

<dt><b><b>How do you get the required initial values for the
      calibration?</b></b></dt>
<dd>


<p>If you use a HALCON calibration plate, the input parameters
<a href="#NX"><i><code><span data-if="hdevelop" style="display:inline">NX</span><span data-if="c" style="display:none">NX</span><span data-if="cpp" style="display:none">NX</span><span data-if="com" style="display:none">NX</span><span data-if="dotnet" style="display:none">NX</span><span data-if="python" style="display:none">nx</span></code></i></a>, <a href="#NY"><i><code><span data-if="hdevelop" style="display:inline">NY</span><span data-if="c" style="display:none">NY</span><span data-if="cpp" style="display:none">NY</span><span data-if="com" style="display:none">NY</span><span data-if="dotnet" style="display:none">NY</span><span data-if="python" style="display:none">ny</span></code></i></a>, and <a href="#NZ"><i><code><span data-if="hdevelop" style="display:inline">NZ</span><span data-if="c" style="display:none">NZ</span><span data-if="cpp" style="display:none">NZ</span><span data-if="com" style="display:none">NZ</span><span data-if="dotnet" style="display:none">NZ</span><span data-if="python" style="display:none">nz</span></code></i></a> are stored in the
description file of the calibration plate.  You can easily access
them by calling 该算子 <a href="caltab_points.html"><code><span data-if="hdevelop" style="display:inline">caltab_points</span><span data-if="c" style="display:none">caltab_points</span><span data-if="cpp" style="display:none">CaltabPoints</span><span data-if="com" style="display:none">CaltabPoints</span><span data-if="dotnet" style="display:none">CaltabPoints</span><span data-if="python" style="display:none">caltab_points</span></code></a>.  Initial values
for the internal camera parameters (<a href="#StartCamParam"><i><code><span data-if="hdevelop" style="display:inline">StartCamParam</span><span data-if="c" style="display:none">StartCamParam</span><span data-if="cpp" style="display:none">StartCamParam</span><span data-if="com" style="display:none">StartCamParam</span><span data-if="dotnet" style="display:none">startCamParam</span><span data-if="python" style="display:none">start_cam_param</span></code></i></a>) can be
obtained from the specifications of the used camera. Further
information can be found in <a href="toc_calibration.html">Calibration</a>. Initial
values for the poses of the calibration plate and the coordinates of
the calibration marks <a href="#NRow"><i><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></i></a> and <a href="#NCol"><i><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></i></a> can be
calculated using 该算子 <a href="find_calib_object.html"><code><span data-if="hdevelop" style="display:inline">find_calib_object</span><span data-if="c" style="display:none">find_calib_object</span><span data-if="cpp" style="display:none">FindCalibObject</span><span data-if="com" style="display:none">FindCalibObject</span><span data-if="dotnet" style="display:none">FindCalibObject</span><span data-if="python" style="display:none">find_calib_object</span></code></a>. The tuple
<a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a> is set by the concatenation of all these poses.
</p>
</dd>

<dt><b><b>Which camera parameters are estimated?</b></b></dt>
<dd>


<p>The input parameter <a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a> is used to select which
camera parameters to estimate.  Usually, this parameter is set to
<i><span data-if="hdevelop" style="display:inline">'all'</span><span data-if="c" style="display:none">"all"</span><span data-if="cpp" style="display:none">"all"</span><span data-if="com" style="display:none">"all"</span><span data-if="dotnet" style="display:none">"all"</span><span data-if="python" style="display:none">"all"</span></i>, i.e., all 6 external camera parameters (translation
and rotation) and all internal camera parameters are determined.  If
the internal camera parameters already have been determined (e.g.,
by a previous call to <code><span data-if="hdevelop" style="display:inline">camera_calibration</span><span data-if="c" style="display:none">camera_calibration</span><span data-if="cpp" style="display:none">CameraCalibration</span><span data-if="com" style="display:none">CameraCalibration</span><span data-if="dotnet" style="display:none">CameraCalibration</span><span data-if="python" style="display:none">camera_calibration</span></code>), it is often
desired to only determine the pose of the world coordinate system in
camera coordinates (i.e., the external camera parameters).  In this
case, <a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a> can be set to <i><span data-if="hdevelop" style="display:inline">'pose'</span><span data-if="c" style="display:none">"pose"</span><span data-if="cpp" style="display:none">"pose"</span><span data-if="com" style="display:none">"pose"</span><span data-if="dotnet" style="display:none">"pose"</span><span data-if="python" style="display:none">"pose"</span></i>.  This
has the same effect as <a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a> =
<i><span data-if="hdevelop" style="display:inline">['alpha','beta','gamma','transx','transy','transz']</span><span data-if="c" style="display:none">["alpha","beta","gamma","transx","transy","transz"]</span><span data-if="cpp" style="display:none">["alpha","beta","gamma","transx","transy","transz"]</span><span data-if="com" style="display:none">["alpha","beta","gamma","transx","transy","transz"]</span><span data-if="dotnet" style="display:none">["alpha","beta","gamma","transx","transy","transz"]</span><span data-if="python" style="display:none">["alpha","beta","gamma","transx","transy","transz"]</span></i>.
Otherwise, <a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a> contains a tuple of strings that
indicates the combination of parameters to estimate.  In addition,
parameters can be excluded from estimation by using the prefix
~.  For example, the values
<i><span data-if="hdevelop" style="display:inline">['pose','~transx']</span><span data-if="c" style="display:none">["pose","~transx"]</span><span data-if="cpp" style="display:none">["pose","~transx"]</span><span data-if="com" style="display:none">["pose","~transx"]</span><span data-if="dotnet" style="display:none">["pose","~transx"]</span><span data-if="python" style="display:none">["pose","~transx"]</span></i>
have the same effect as
<i><span data-if="hdevelop" style="display:inline">['alpha','beta','gamma','transy','transz']</span><span data-if="c" style="display:none">["alpha","beta","gamma","transy","transz"]</span><span data-if="cpp" style="display:none">["alpha","beta","gamma","transy","transz"]</span><span data-if="com" style="display:none">["alpha","beta","gamma","transy","transz"]</span><span data-if="dotnet" style="display:none">["alpha","beta","gamma","transy","transz"]</span><span data-if="python" style="display:none">["alpha","beta","gamma","transy","transz"]</span></i>.  As a different
example,
<i><span data-if="hdevelop" style="display:inline">['all','~focus']</span><span data-if="c" style="display:none">["all","~focus"]</span><span data-if="cpp" style="display:none">["all","~focus"]</span><span data-if="com" style="display:none">["all","~focus"]</span><span data-if="dotnet" style="display:none">["all","~focus"]</span><span data-if="python" style="display:none">["all","~focus"]</span></i>
determines all internal and external parameters except the
focus. The prefix ~ can be used with all parameter
values except <i><span data-if="hdevelop" style="display:inline">'all'</span><span data-if="c" style="display:none">"all"</span><span data-if="cpp" style="display:none">"all"</span><span data-if="com" style="display:none">"all"</span><span data-if="dotnet" style="display:none">"all"</span><span data-if="python" style="display:none">"all"</span></i>.
</p>
</dd>

<dt><b><b>Which limitations exist for the determination of the
      camera parameters?</b></b></dt>
<dd>


<p>For additional information about general limitations when
determining camera parameters, please see the section
“Further Limitations Related to Specific Camera Types” in the chapter
<a href="toc_calibration.html">Calibration</a>.
</p>
</dd>

<dt><b><b>What is the order within the individual parameters?</b></b></dt>
<dd>


<p>The length of the tuple <a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a> depends on the number of
calibration images, e.g., using 15 images leads to a length of the
tuple <a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a> equal to <span title="3" style="vertical-align:-0.0710211em" class="math"><!-- Created by MetaPost 1.902 on 2023.05.15:2033 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="5.16267em" height="0.767042em" viewBox="0 0 82.602707 12.272675">
<!-- Original BoundingBox: -41.301361 -6.136337 41.301346 6.136337 -->
  <defs>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_48">
      <path style="fill-rule: evenodd;" d="M460.000000 -320.000000C460.000000 -400.000000,455.000000 -480.000000,420.000000 -554.000000C374.000000 -650.000000,292.000000 -666.000000,250.000000 -666.000000C190.000000 -666.000000,117.000000 -640.000000,76.000000 -547.000000C44.000000 -478.000000,39.000000 -400.000000,39.000000 -320.000000C39.000000 -245.000000,43.000000 -155.000000,84.000000 -79.000000C127.000000 2.000000,200.000000 22.000000,249.000000 22.000000C303.000000 22.000000,379.000000 1.000000,423.000000 -94.000000C455.000000 -163.000000,460.000000 -241.000000,460.000000 -320.000000M249.000000 -0.000000C210.000000 -0.000000,151.000000 -25.000000,133.000000 -121.000000C122.000000 -181.000000,122.000000 -273.000000,122.000000 -332.000000C122.000000 -396.000000,122.000000 -462.000000,130.000000 -516.000000C149.000000 -635.000000,224.000000 -644.000000,249.000000 -644.000000C282.000000 -644.000000,348.000000 -626.000000,367.000000 -527.000000C377.000000 -471.000000,377.000000 -395.000000,377.000000 -332.000000C377.000000 -257.000000,377.000000 -189.000000,366.000000 -125.000000C351.000000 -30.000000,294.000000 -0.000000,249.000000 -0.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_49">
      <path style="fill-rule: evenodd;" d="M294.000000 -640.000000C294.000000 -664.000000,294.000000 -666.000000,271.000000 -666.000000C209.000000 -602.000000,121.000000 -602.000000,89.000000 -602.000000L89.000000 -571.000000C109.000000 -571.000000,168.000000 -571.000000,220.000000 -597.000000L220.000000 -79.000000C220.000000 -43.000000,217.000000 -31.000000,127.000000 -31.000000L95.000000 -31.000000L95.000000 -0.000000L257.000000 -0.000000L130.000000 -3.000000L217.000000 -3.000000L257.000000 -3.000000L297.000000 -3.000000L384.000000 -3.000000L419.000000 -0.000000L419.000000 -31.000000L387.000000 -31.000000C297.000000 -31.000000,294.000000 -42.000000,294.000000 -79.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_53">
      <path style="fill-rule: evenodd;" d="M449.000000 -201.000000C449.000000 -320.000000,367.000000 -420.000000,259.000000 -420.000000C211.000000 -420.000000,168.000000 -404.000000,132.000000 -369.000000L132.000000 -564.000000C152.000000 -558.000000,185.000000 -551.000000,217.000000 -551.000000C340.000000 -551.000000,410.000000 -642.000000,410.000000 -655.000000C410.000000 -661.000000,407.000000 -666.000000,400.000000 -666.000000C399.000000 -666.000000,397.000000 -666.000000,392.000000 -663.000000C372.000000 -654.000000,323.000000 -634.000000,256.000000 -634.000000C216.000000 -634.000000,170.000000 -641.000000,123.000000 -662.000000C115.000000 -665.000000,113.000000 -665.000000,111.000000 -665.000000C101.000000 -665.000000,101.000000 -657.000000,101.000000 -641.000000L101.000000 -345.000000C101.000000 -327.000000,101.000000 -319.000000,115.000000 -319.000000C122.000000 -319.000000,124.000000 -322.000000,128.000000 -328.000000C139.000000 -344.000000,176.000000 -398.000000,257.000000 -398.000000C309.000000 -398.000000,334.000000 -352.000000,342.000000 -334.000000C358.000000 -297.000000,360.000000 -258.000000,360.000000 -208.000000C360.000000 -173.000000,360.000000 -113.000000,336.000000 -71.000000C312.000000 -32.000000,275.000000 -6.000000,229.000000 -6.000000C156.000000 -6.000000,99.000000 -59.000000,82.000000 -118.000000C85.000000 -117.000000,88.000000 -116.000000,99.000000 -116.000000C132.000000 -116.000000,149.000000 -141.000000,149.000000 -165.000000C149.000000 -189.000000,132.000000 -214.000000,99.000000 -214.000000C85.000000 -214.000000,50.000000 -207.000000,50.000000 -161.000000C50.000000 -75.000000,119.000000 22.000000,231.000000 22.000000C347.000000 22.000000,449.000000 -74.000000,449.000000 -201.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_55">
      <path style="fill-rule: evenodd;" d="M476.000000 -609.000000C485.000000 -621.000000,485.000000 -623.000000,485.000000 -644.000000L242.000000 -644.000000C120.000000 -644.000000,118.000000 -657.000000,114.000000 -676.000000L89.000000 -676.000000L56.000000 -470.000000L81.000000 -470.000000C84.000000 -486.000000,93.000000 -549.000000,106.000000 -561.000000C113.000000 -567.000000,191.000000 -567.000000,204.000000 -567.000000L411.000000 -567.000000C400.000000 -551.000000,321.000000 -442.000000,299.000000 -409.000000C209.000000 -274.000000,176.000000 -135.000000,176.000000 -33.000000C176.000000 -23.000000,176.000000 22.000000,222.000000 22.000000C268.000000 22.000000,268.000000 -23.000000,268.000000 -33.000000L268.000000 -84.000000C268.000000 -139.000000,271.000000 -194.000000,279.000000 -248.000000C283.000000 -271.000000,297.000000 -357.000000,341.000000 -419.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_61">
      <path style="fill-rule: evenodd;" d="M687.000000 -327.000000C702.000000 -327.000000,721.000000 -327.000000,721.000000 -347.000000C721.000000 -367.000000,702.000000 -367.000000,688.000000 -367.000000L89.000000 -367.000000C75.000000 -367.000000,56.000000 -367.000000,56.000000 -347.000000C56.000000 -327.000000,75.000000 -327.000000,90.000000 -327.000000M688.000000 -133.000000C702.000000 -133.000000,721.000000 -133.000000,721.000000 -153.000000C721.000000 -173.000000,702.000000 -173.000000,687.000000 -173.000000L90.000000 -173.000000C75.000000 -173.000000,56.000000 -173.000000,56.000000 -153.000000C56.000000 -133.000000,75.000000 -133.000000,89.000000 -133.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmsy10_1">
      <path style="fill-rule: evenodd;" d="M192.000000 -250.000000C192.000000 -279.000000,168.000000 -303.000000,139.000000 -303.000000C110.000000 -303.000000,86.000000 -279.000000,86.000000 -250.000000C86.000000 -221.000000,110.000000 -197.000000,139.000000 -197.000000C168.000000 -197.000000,192.000000 -221.000000,192.000000 -250.000000"></path>
    </g>
  </defs>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,0.714630 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_49"></use>
    <use xlink:href="#GLYPHcmr10_53" x="5.000095"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,20.197098 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmsy10_1"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,28.167221 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_55"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,40.565033 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_61"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,57.390854 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_49"></use>
    <use xlink:href="#GLYPHcmr10_48" x="5.000095"></use>
    <use xlink:href="#GLYPHcmr10_53" x="10.000190"></use>
  </g>
</svg></span>
(15 times the 7 external camera parameters). The first 7 values
correspond to the pose of the calibration plate in the first image,
the next 7 values to the pose in the second image, etc.
</p>
<p>This fixed number of calibration images must be considered within
the tuples with the coordinates of the 3D model marks and the
extracted 2D marks.  If 15 images are used, the length of the tuples
<a href="#NRow"><i><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></i></a> and <a href="#NCol"><i><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></i></a> is 15 times the length of the tuples
with the coordinates of the 3D model marks (<a href="#NX"><i><code><span data-if="hdevelop" style="display:inline">NX</span><span data-if="c" style="display:none">NX</span><span data-if="cpp" style="display:none">NX</span><span data-if="com" style="display:none">NX</span><span data-if="dotnet" style="display:none">NX</span><span data-if="python" style="display:none">nx</span></code></i></a>,
<a href="#NY"><i><code><span data-if="hdevelop" style="display:inline">NY</span><span data-if="c" style="display:none">NY</span><span data-if="cpp" style="display:none">NY</span><span data-if="com" style="display:none">NY</span><span data-if="dotnet" style="display:none">NY</span><span data-if="python" style="display:none">ny</span></code></i></a>, and <a href="#NZ"><i><code><span data-if="hdevelop" style="display:inline">NZ</span><span data-if="c" style="display:none">NZ</span><span data-if="cpp" style="display:none">NZ</span><span data-if="com" style="display:none">NZ</span><span data-if="dotnet" style="display:none">NZ</span><span data-if="python" style="display:none">nz</span></code></i></a>).  If every image consists 49 marks,
the length of the tuples <a href="#NRow"><i><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></i></a> and <a href="#NCol"><i><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></i></a> is
<span title="4" style="vertical-align:-0.0710211em" class="math"><!-- Created by MetaPost 1.902 on 2023.05.15:2033 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="5.66081em" height="0.767042em" viewBox="0 0 90.572968 12.272675">
<!-- Original BoundingBox: -45.286484 -6.136337 45.286484 6.136337 -->
  <defs>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_49">
      <path style="fill-rule: evenodd;" d="M294.000000 -640.000000C294.000000 -664.000000,294.000000 -666.000000,271.000000 -666.000000C209.000000 -602.000000,121.000000 -602.000000,89.000000 -602.000000L89.000000 -571.000000C109.000000 -571.000000,168.000000 -571.000000,220.000000 -597.000000L220.000000 -79.000000C220.000000 -43.000000,217.000000 -31.000000,127.000000 -31.000000L95.000000 -31.000000L95.000000 -0.000000L257.000000 -0.000000L130.000000 -3.000000L217.000000 -3.000000L257.000000 -3.000000L297.000000 -3.000000L384.000000 -3.000000L419.000000 -0.000000L419.000000 -31.000000L387.000000 -31.000000C297.000000 -31.000000,294.000000 -42.000000,294.000000 -79.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_51">
      <path style="fill-rule: evenodd;" d="M290.000000 -352.000000C372.000000 -379.000000,430.000000 -449.000000,430.000000 -528.000000C430.000000 -610.000000,342.000000 -666.000000,246.000000 -666.000000C145.000000 -666.000000,69.000000 -606.000000,69.000000 -530.000000C69.000000 -497.000000,91.000000 -478.000000,120.000000 -478.000000C151.000000 -478.000000,171.000000 -500.000000,171.000000 -529.000000C171.000000 -579.000000,124.000000 -579.000000,109.000000 -579.000000C140.000000 -628.000000,206.000000 -641.000000,242.000000 -641.000000C283.000000 -641.000000,338.000000 -619.000000,338.000000 -529.000000C338.000000 -517.000000,336.000000 -459.000000,310.000000 -415.000000C280.000000 -367.000000,246.000000 -364.000000,221.000000 -363.000000C213.000000 -362.000000,189.000000 -360.000000,182.000000 -360.000000C174.000000 -359.000000,167.000000 -358.000000,167.000000 -348.000000C167.000000 -337.000000,174.000000 -337.000000,191.000000 -337.000000L235.000000 -337.000000C317.000000 -337.000000,354.000000 -269.000000,354.000000 -171.000000C354.000000 -35.000000,285.000000 -6.000000,241.000000 -6.000000C198.000000 -6.000000,123.000000 -23.000000,88.000000 -82.000000C123.000000 -77.000000,154.000000 -99.000000,154.000000 -137.000000C154.000000 -173.000000,127.000000 -193.000000,98.000000 -193.000000C74.000000 -193.000000,42.000000 -179.000000,42.000000 -135.000000C42.000000 -44.000000,135.000000 22.000000,244.000000 22.000000C366.000000 22.000000,457.000000 -69.000000,457.000000 -171.000000C457.000000 -253.000000,394.000000 -331.000000,290.000000 -352.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_52">
      <path style="fill-rule: evenodd;" d="M294.000000 -165.000000L294.000000 -78.000000C294.000000 -42.000000,292.000000 -31.000000,218.000000 -31.000000L197.000000 -31.000000L197.000000 -0.000000L332.000000 -0.000000L238.000000 -3.000000L290.000000 -3.000000L332.000000 -3.000000L374.000000 -3.000000L427.000000 -3.000000L468.000000 -0.000000L468.000000 -31.000000L447.000000 -31.000000C373.000000 -31.000000,371.000000 -42.000000,371.000000 -78.000000L371.000000 -165.000000L471.000000 -165.000000L471.000000 -196.000000L371.000000 -196.000000L371.000000 -651.000000C371.000000 -671.000000,371.000000 -677.000000,355.000000 -677.000000C346.000000 -677.000000,343.000000 -677.000000,335.000000 -665.000000L28.000000 -196.000000L28.000000 -165.000000M300.000000 -196.000000L56.000000 -196.000000L300.000000 -569.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_53">
      <path style="fill-rule: evenodd;" d="M449.000000 -201.000000C449.000000 -320.000000,367.000000 -420.000000,259.000000 -420.000000C211.000000 -420.000000,168.000000 -404.000000,132.000000 -369.000000L132.000000 -564.000000C152.000000 -558.000000,185.000000 -551.000000,217.000000 -551.000000C340.000000 -551.000000,410.000000 -642.000000,410.000000 -655.000000C410.000000 -661.000000,407.000000 -666.000000,400.000000 -666.000000C399.000000 -666.000000,397.000000 -666.000000,392.000000 -663.000000C372.000000 -654.000000,323.000000 -634.000000,256.000000 -634.000000C216.000000 -634.000000,170.000000 -641.000000,123.000000 -662.000000C115.000000 -665.000000,113.000000 -665.000000,111.000000 -665.000000C101.000000 -665.000000,101.000000 -657.000000,101.000000 -641.000000L101.000000 -345.000000C101.000000 -327.000000,101.000000 -319.000000,115.000000 -319.000000C122.000000 -319.000000,124.000000 -322.000000,128.000000 -328.000000C139.000000 -344.000000,176.000000 -398.000000,257.000000 -398.000000C309.000000 -398.000000,334.000000 -352.000000,342.000000 -334.000000C358.000000 -297.000000,360.000000 -258.000000,360.000000 -208.000000C360.000000 -173.000000,360.000000 -113.000000,336.000000 -71.000000C312.000000 -32.000000,275.000000 -6.000000,229.000000 -6.000000C156.000000 -6.000000,99.000000 -59.000000,82.000000 -118.000000C85.000000 -117.000000,88.000000 -116.000000,99.000000 -116.000000C132.000000 -116.000000,149.000000 -141.000000,149.000000 -165.000000C149.000000 -189.000000,132.000000 -214.000000,99.000000 -214.000000C85.000000 -214.000000,50.000000 -207.000000,50.000000 -161.000000C50.000000 -75.000000,119.000000 22.000000,231.000000 22.000000C347.000000 22.000000,449.000000 -74.000000,449.000000 -201.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_55">
      <path style="fill-rule: evenodd;" d="M476.000000 -609.000000C485.000000 -621.000000,485.000000 -623.000000,485.000000 -644.000000L242.000000 -644.000000C120.000000 -644.000000,118.000000 -657.000000,114.000000 -676.000000L89.000000 -676.000000L56.000000 -470.000000L81.000000 -470.000000C84.000000 -486.000000,93.000000 -549.000000,106.000000 -561.000000C113.000000 -567.000000,191.000000 -567.000000,204.000000 -567.000000L411.000000 -567.000000C400.000000 -551.000000,321.000000 -442.000000,299.000000 -409.000000C209.000000 -274.000000,176.000000 -135.000000,176.000000 -33.000000C176.000000 -23.000000,176.000000 22.000000,222.000000 22.000000C268.000000 22.000000,268.000000 -23.000000,268.000000 -33.000000L268.000000 -84.000000C268.000000 -139.000000,271.000000 -194.000000,279.000000 -248.000000C283.000000 -271.000000,297.000000 -357.000000,341.000000 -419.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_57">
      <path style="fill-rule: evenodd;" d="M367.000000 -318.000000L367.000000 -286.000000C367.000000 -52.000000,263.000000 -6.000000,205.000000 -6.000000C188.000000 -6.000000,134.000000 -8.000000,107.000000 -42.000000C151.000000 -42.000000,159.000000 -71.000000,159.000000 -88.000000C159.000000 -119.000000,135.000000 -134.000000,113.000000 -134.000000C97.000000 -134.000000,67.000000 -125.000000,67.000000 -86.000000C67.000000 -19.000000,121.000000 22.000000,206.000000 22.000000C335.000000 22.000000,457.000000 -114.000000,457.000000 -329.000000C457.000000 -598.000000,342.000000 -666.000000,253.000000 -666.000000C198.000000 -666.000000,149.000000 -648.000000,106.000000 -603.000000C65.000000 -558.000000,42.000000 -516.000000,42.000000 -441.000000C42.000000 -316.000000,130.000000 -218.000000,242.000000 -218.000000C303.000000 -218.000000,344.000000 -260.000000,367.000000 -318.000000M243.000000 -241.000000C227.000000 -241.000000,181.000000 -241.000000,150.000000 -304.000000C132.000000 -341.000000,132.000000 -391.000000,132.000000 -440.000000C132.000000 -494.000000,132.000000 -541.000000,153.000000 -578.000000C180.000000 -628.000000,218.000000 -641.000000,253.000000 -641.000000C299.000000 -641.000000,332.000000 -607.000000,349.000000 -562.000000C361.000000 -530.000000,365.000000 -467.000000,365.000000 -421.000000C365.000000 -338.000000,331.000000 -241.000000,243.000000 -241.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_61">
      <path style="fill-rule: evenodd;" d="M687.000000 -327.000000C702.000000 -327.000000,721.000000 -327.000000,721.000000 -347.000000C721.000000 -367.000000,702.000000 -367.000000,688.000000 -367.000000L89.000000 -367.000000C75.000000 -367.000000,56.000000 -367.000000,56.000000 -347.000000C56.000000 -327.000000,75.000000 -327.000000,90.000000 -327.000000M688.000000 -133.000000C702.000000 -133.000000,721.000000 -133.000000,721.000000 -153.000000C721.000000 -173.000000,702.000000 -173.000000,687.000000 -173.000000L90.000000 -173.000000C75.000000 -173.000000,56.000000 -173.000000,56.000000 -153.000000C56.000000 -133.000000,75.000000 -133.000000,89.000000 -133.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmsy10_1">
      <path style="fill-rule: evenodd;" d="M192.000000 -250.000000C192.000000 -279.000000,168.000000 -303.000000,139.000000 -303.000000C110.000000 -303.000000,86.000000 -279.000000,86.000000 -250.000000C86.000000 -221.000000,110.000000 -197.000000,139.000000 -197.000000C168.000000 -197.000000,192.000000 -221.000000,192.000000 -250.000000"></path>
    </g>
  </defs>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,0.729507 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_49"></use>
    <use xlink:href="#GLYPHcmr10_53" x="5.000095"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,20.211975 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmsy10_1"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,28.182098 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_52"></use>
    <use xlink:href="#GLYPHcmr10_57" x="5.000095"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,48.550171 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_61"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,65.375854 11.136337)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_55"></use>
    <use xlink:href="#GLYPHcmr10_51" x="5.000095"></use>
    <use xlink:href="#GLYPHcmr10_53" x="10.000190"></use>
  </g>
</svg></span>, while the length of the tuples
<a href="#NX"><i><code><span data-if="hdevelop" style="display:inline">NX</span><span data-if="c" style="display:none">NX</span><span data-if="cpp" style="display:none">NX</span><span data-if="com" style="display:none">NX</span><span data-if="dotnet" style="display:none">NX</span><span data-if="python" style="display:none">nx</span></code></i></a>, <a href="#NY"><i><code><span data-if="hdevelop" style="display:inline">NY</span><span data-if="c" style="display:none">NY</span><span data-if="cpp" style="display:none">NY</span><span data-if="com" style="display:none">NY</span><span data-if="dotnet" style="display:none">NY</span><span data-if="python" style="display:none">ny</span></code></i></a>, and <a href="#NZ"><i><code><span data-if="hdevelop" style="display:inline">NZ</span><span data-if="c" style="display:none">NZ</span><span data-if="cpp" style="display:none">NZ</span><span data-if="com" style="display:none">NZ</span><span data-if="dotnet" style="display:none">NZ</span><span data-if="python" style="display:none">nz</span></code></i></a> is 49.  The order of the
values in <a href="#NRow"><i><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></i></a> and <a href="#NCol"><i><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></i></a> is “image after image”,
i.e., using 49 marks the first 3D model point corresponds to the
1st, 50th, 99th, 148th, 197th, 246th, etc. extracted 2D mark.
</p>
</dd>

<dt><b><b>What is the meaning of the output parameters?</b></b></dt>
<dd>


<p>If the camera calibration process has finished successfully, the
output parameters <a href="#CameraParam"><i><code><span data-if="hdevelop" style="display:inline">CameraParam</span><span data-if="c" style="display:none">CameraParam</span><span data-if="cpp" style="display:none">CameraParam</span><span data-if="com" style="display:none">CameraParam</span><span data-if="dotnet" style="display:none">cameraParam</span><span data-if="python" style="display:none">camera_param</span></code></i></a> and <a href="#NFinalPose"><i><code><span data-if="hdevelop" style="display:inline">NFinalPose</span><span data-if="c" style="display:none">NFinalPose</span><span data-if="cpp" style="display:none">NFinalPose</span><span data-if="com" style="display:none">NFinalPose</span><span data-if="dotnet" style="display:none">NFinalPose</span><span data-if="python" style="display:none">nfinal_pose</span></code></i></a>
contain the adjusted values for the internal and external camera
parameters.  The length of the tuple <a href="#NFinalPose"><i><code><span data-if="hdevelop" style="display:inline">NFinalPose</span><span data-if="c" style="display:none">NFinalPose</span><span data-if="cpp" style="display:none">NFinalPose</span><span data-if="com" style="display:none">NFinalPose</span><span data-if="dotnet" style="display:none">NFinalPose</span><span data-if="python" style="display:none">nfinal_pose</span></code></i></a> corresponds
to the length of the tuple <a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a>.
</p>
<p>The representation types of <a href="#NFinalPose"><i><code><span data-if="hdevelop" style="display:inline">NFinalPose</span><span data-if="c" style="display:none">NFinalPose</span><span data-if="cpp" style="display:none">NFinalPose</span><span data-if="com" style="display:none">NFinalPose</span><span data-if="dotnet" style="display:none">NFinalPose</span><span data-if="python" style="display:none">nfinal_pose</span></code></i></a> correspond to the
representation type of the first tuple of <a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a> (see
<a href="create_pose.html"><code><span data-if="hdevelop" style="display:inline">create_pose</span><span data-if="c" style="display:none">create_pose</span><span data-if="cpp" style="display:none">CreatePose</span><span data-if="com" style="display:none">CreatePose</span><span data-if="dotnet" style="display:none">CreatePose</span><span data-if="python" style="display:none">create_pose</span></code></a>).  You can convert the representation type by
<a href="convert_pose_type.html"><code><span data-if="hdevelop" style="display:inline">convert_pose_type</span><span data-if="c" style="display:none">convert_pose_type</span><span data-if="cpp" style="display:none">ConvertPoseType</span><span data-if="com" style="display:none">ConvertPoseType</span><span data-if="dotnet" style="display:none">ConvertPoseType</span><span data-if="python" style="display:none">convert_pose_type</span></code></a>.
</p>
<p>As an additional parameter, the root mean square error (RMSE)
(<a href="#Errors"><i><code><span data-if="hdevelop" style="display:inline">Errors</span><span data-if="c" style="display:none">Errors</span><span data-if="cpp" style="display:none">Errors</span><span data-if="com" style="display:none">Errors</span><span data-if="dotnet" style="display:none">errors</span><span data-if="python" style="display:none">errors</span></code></i></a>) of the back projection of the optimization is
returned.  This parameter reflects the accuracy of the calibration.
The error value (root mean square error of the position) is measured
in pixels. If only a single camera is calibrated, an Error in the
order of 0.1 pixel (the typical detection error by extraction of the
coordinates of the projected calibration markers) is an indication
that the optimization fits the observation data well.  If
<a href="#Errors"><i><code><span data-if="hdevelop" style="display:inline">Errors</span><span data-if="c" style="display:none">Errors</span><span data-if="cpp" style="display:none">Errors</span><span data-if="com" style="display:none">Errors</span><span data-if="dotnet" style="display:none">errors</span><span data-if="python" style="display:none">errors</span></code></i></a> strongly differs from 0.1 pixels, the calibration
did not perform well.  Reasons for this might be, e.g., a poor image
quality, an insufficient number of calibration images, or an
inaccurate calibration plate.
</p>
</dd>

<dt><b><b>Do I have to use a planar calibration object?</b></b></dt>
<dd>


<p>No. 该算子 <code><span data-if="hdevelop" style="display:inline">camera_calibration</span><span data-if="c" style="display:none">camera_calibration</span><span data-if="cpp" style="display:none">CameraCalibration</span><span data-if="com" style="display:none">CameraCalibration</span><span data-if="dotnet" style="display:none">CameraCalibration</span><span data-if="python" style="display:none">camera_calibration</span></code> is designed in a way
that the input tuples <a href="#NX"><i><code><span data-if="hdevelop" style="display:inline">NX</span><span data-if="c" style="display:none">NX</span><span data-if="cpp" style="display:none">NX</span><span data-if="com" style="display:none">NX</span><span data-if="dotnet" style="display:none">NX</span><span data-if="python" style="display:none">nx</span></code></i></a>, <a href="#NY"><i><code><span data-if="hdevelop" style="display:inline">NY</span><span data-if="c" style="display:none">NY</span><span data-if="cpp" style="display:none">NY</span><span data-if="com" style="display:none">NY</span><span data-if="dotnet" style="display:none">NY</span><span data-if="python" style="display:none">ny</span></code></i></a>, <a href="#NZ"><i><code><span data-if="hdevelop" style="display:inline">NZ</span><span data-if="c" style="display:none">NZ</span><span data-if="cpp" style="display:none">NZ</span><span data-if="com" style="display:none">NZ</span><span data-if="dotnet" style="display:none">NZ</span><span data-if="python" style="display:none">nz</span></code></i></a>,
<a href="#NRow"><i><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></i></a>, and <a href="#NCol"><i><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></i></a> can contain any 3D/2D
correspondences.  The order of the single parameters is explained in
the paragraph “What is the order within the individual
parameters?”.
</p>
<p>Thus, it makes no difference how the required 3D model marks and the
corresponding 2D marks are determined.  On the one hand, it is
possible to use a 3D calibration object, on the other hand, you also
can use any characteristic points (e.g., natural landmarks) with
known position in the world.  By setting <a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a> to
<i><span data-if="hdevelop" style="display:inline">'pose'</span><span data-if="c" style="display:none">"pose"</span><span data-if="cpp" style="display:none">"pose"</span><span data-if="com" style="display:none">"pose"</span><span data-if="dotnet" style="display:none">"pose"</span><span data-if="python" style="display:none">"pose"</span></i>, it is thus possible to compute the pose of an
object in camera coordinates!  For this, at least three
3D/2D-correspondences are necessary as input.  <a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a>
can, e.g., be generated directly as shown in the program example for
<a href="create_pose.html"><code><span data-if="hdevelop" style="display:inline">create_pose</span><span data-if="c" style="display:none">create_pose</span><span data-if="cpp" style="display:none">CreatePose</span><span data-if="com" style="display:none">CreatePose</span><span data-if="dotnet" style="display:none">CreatePose</span><span data-if="python" style="display:none">create_pose</span></code></a>.
</p>
</dd>
</dl>
<h2 id="sec_attention">注意</h2>
<p>The minimization process of the calibration depends on the initial
values of the internal (<a href="#StartCamParam"><i><code><span data-if="hdevelop" style="display:inline">StartCamParam</span><span data-if="c" style="display:none">StartCamParam</span><span data-if="cpp" style="display:none">StartCamParam</span><span data-if="com" style="display:none">StartCamParam</span><span data-if="dotnet" style="display:none">startCamParam</span><span data-if="python" style="display:none">start_cam_param</span></code></i></a>) and external
(<a href="#NStartPose"><i><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></i></a>) camera parameters. The computed average errors
<a href="#Errors"><i><code><span data-if="hdevelop" style="display:inline">Errors</span><span data-if="c" style="display:none">Errors</span><span data-if="cpp" style="display:none">Errors</span><span data-if="com" style="display:none">Errors</span><span data-if="dotnet" style="display:none">errors</span><span data-if="python" style="display:none">errors</span></code></i></a> give an impression of the accuracy of the
calibration. The errors (deviations in x- and y-coordinates) are
measured in pixels.
</p>
<p>For line scan cameras, it is possible to set the start value for the
internal camera parameter Sy to the value 0.0.  In this case, it is
not possible to determine the position of the principal point in
y-direction.  Therefore, <a href="#EstimateParams"><i><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></i></a> must contain the
term <i><span data-if="hdevelop" style="display:inline">'~cy'</span><span data-if="c" style="display:none">"~cy"</span><span data-if="cpp" style="display:none">"~cy"</span><span data-if="com" style="display:none">"~cy"</span><span data-if="dotnet" style="display:none">"~cy"</span><span data-if="python" style="display:none">"~cy"</span></i>.  The effective
distance of the principle point from the sensor line is then always
<span title="5" style="vertical-align:-0.392954em" class="math"><!-- Created by MetaPost 1.902 on 2023.05.15:2033 --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="7.7622em" height="1.09082em" viewBox="0 0 124.195190 17.453186">
<!-- Original BoundingBox: -62.097595 -8.726593 62.097595 8.726593 -->
  <defs>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_118">
      <path style="fill-rule: evenodd;" d="M534.000000 -363.000000C534.000000 -441.000000,487.000000 -442.000000,484.000000 -442.000000C458.000000 -442.000000,430.000000 -415.000000,430.000000 -389.000000C430.000000 -372.000000,440.000000 -364.000000,447.000000 -358.000000C464.000000 -344.000000,484.000000 -318.000000,484.000000 -278.000000C484.000000 -233.000000,418.000000 -18.000000,299.000000 -18.000000C218.000000 -18.000000,218.000000 -90.000000,218.000000 -107.000000C218.000000 -153.000000,236.000000 -209.000000,273.000000 -302.000000C281.000000 -323.000000,287.000000 -338.000000,287.000000 -355.000000C287.000000 -407.000000,243.000000 -441.000000,192.000000 -441.000000C92.000000 -441.000000,47.000000 -304.000000,47.000000 -288.000000C47.000000 -275.000000,61.000000 -275.000000,64.000000 -275.000000C78.000000 -275.000000,79.000000 -280.000000,82.000000 -291.000000C106.000000 -373.000000,149.000000 -413.000000,189.000000 -413.000000C206.000000 -413.000000,214.000000 -402.000000,214.000000 -378.000000C214.000000 -355.000000,206.000000 -334.000000,196.000000 -311.000000C153.000000 -200.000000,142.000000 -157.000000,142.000000 -121.000000C142.000000 -22.000000,220.000000 10.000000,296.000000 10.000000C464.000000 10.000000,534.000000 -281.000000,534.000000 -363.000000"></path>
    </g>
    <g transform="scale(0.006974,0.006974)" id="GLYPHcmmi7_121">
      <path style="fill-rule: evenodd;" d="M556.000000 -377.000000C560.000000 -391.000000,560.000000 -393.000000,560.000000 -399.000000C560.000000 -419.000000,544.000000 -431.000000,527.000000 -431.000000C516.000000 -431.000000,497.000000 -426.000000,486.000000 -407.000000C483.000000 -401.000000,475.000000 -369.000000,470.000000 -349.000000L449.000000 -266.000000C443.000000 -242.000000,412.000000 -116.000000,409.000000 -105.000000C408.000000 -105.000000,364.000000 -18.000000,286.000000 -18.000000C218.000000 -18.000000,218.000000 -83.000000,218.000000 -101.000000C218.000000 -155.000000,241.000000 -218.000000,271.000000 -295.000000C283.000000 -327.000000,288.000000 -339.000000,288.000000 -356.000000C288.000000 -404.000000,247.000000 -441.000000,193.000000 -441.000000C92.000000 -441.000000,47.000000 -305.000000,47.000000 -288.000000C47.000000 -275.000000,61.000000 -275.000000,64.000000 -275.000000C78.000000 -275.000000,79.000000 -280.000000,82.000000 -291.000000C107.000000 -374.000000,150.000000 -413.000000,190.000000 -413.000000C207.000000 -413.000000,215.000000 -402.000000,215.000000 -378.000000C215.000000 -355.000000,206.000000 -333.000000,201.000000 -320.000000C153.000000 -198.000000,143.000000 -161.000000,143.000000 -117.000000C143.000000 -100.000000,143.000000 -53.000000,182.000000 -21.000000C213.000000 5.000000,255.000000 10.000000,282.000000 10.000000C322.000000 10.000000,358.000000 -5.000000,391.000000 -35.000000C378.000000 20.000000,367.000000 62.000000,325.000000 112.000000C298.000000 143.000000,258.000000 176.000000,205.000000 176.000000C198.000000 176.000000,151.000000 176.000000,130.000000 143.000000C184.000000 137.000000,184.000000 89.000000,184.000000 88.000000C184.000000 56.000000,155.000000 50.000000,145.000000 50.000000C120.000000 50.000000,87.000000 70.000000,87.000000 116.000000C87.000000 167.000000,135.000000 204.000000,206.000000 204.000000C307.000000 204.000000,430.000000 126.000000,461.000000 1.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_48">
      <path style="fill-rule: evenodd;" d="M460.000000 -320.000000C460.000000 -400.000000,455.000000 -480.000000,420.000000 -554.000000C374.000000 -650.000000,292.000000 -666.000000,250.000000 -666.000000C190.000000 -666.000000,117.000000 -640.000000,76.000000 -547.000000C44.000000 -478.000000,39.000000 -400.000000,39.000000 -320.000000C39.000000 -245.000000,43.000000 -155.000000,84.000000 -79.000000C127.000000 2.000000,200.000000 22.000000,249.000000 22.000000C303.000000 22.000000,379.000000 1.000000,423.000000 -94.000000C455.000000 -163.000000,460.000000 -241.000000,460.000000 -320.000000M249.000000 -0.000000C210.000000 -0.000000,151.000000 -25.000000,133.000000 -121.000000C122.000000 -181.000000,122.000000 -273.000000,122.000000 -332.000000C122.000000 -396.000000,122.000000 -462.000000,130.000000 -516.000000C149.000000 -635.000000,224.000000 -644.000000,249.000000 -644.000000C282.000000 -644.000000,348.000000 -626.000000,367.000000 -527.000000C377.000000 -471.000000,377.000000 -395.000000,377.000000 -332.000000C377.000000 -257.000000,377.000000 -189.000000,366.000000 -125.000000C351.000000 -30.000000,294.000000 -0.000000,249.000000 -0.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmr10_61">
      <path style="fill-rule: evenodd;" d="M687.000000 -327.000000C702.000000 -327.000000,721.000000 -327.000000,721.000000 -347.000000C721.000000 -367.000000,702.000000 -367.000000,688.000000 -367.000000L89.000000 -367.000000C75.000000 -367.000000,56.000000 -367.000000,56.000000 -347.000000C56.000000 -327.000000,75.000000 -327.000000,90.000000 -327.000000M688.000000 -133.000000C702.000000 -133.000000,721.000000 -133.000000,721.000000 -153.000000C721.000000 -173.000000,702.000000 -173.000000,687.000000 -173.000000L90.000000 -173.000000C75.000000 -173.000000,56.000000 -173.000000,56.000000 -153.000000C56.000000 -133.000000,75.000000 -133.000000,89.000000 -133.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmsy10_1">
      <path style="fill-rule: evenodd;" d="M192.000000 -250.000000C192.000000 -279.000000,168.000000 -303.000000,139.000000 -303.000000C110.000000 -303.000000,86.000000 -279.000000,86.000000 -250.000000C86.000000 -221.000000,110.000000 -197.000000,139.000000 -197.000000C168.000000 -197.000000,192.000000 -221.000000,192.000000 -250.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmmi10_58">
      <path style="fill-rule: evenodd;" d="M192.000000 -53.000000C192.000000 -82.000000,168.000000 -106.000000,139.000000 -106.000000C110.000000 -106.000000,86.000000 -82.000000,86.000000 -53.000000C86.000000 -24.000000,110.000000 -0.000000,139.000000 -0.000000C168.000000 -0.000000,192.000000 -24.000000,192.000000 -53.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmmi10_67">
      <path style="fill-rule: evenodd;" d="M760.000000 -695.000000C760.000000 -698.000000,758.000000 -705.000000,749.000000 -705.000000C746.000000 -705.000000,745.000000 -704.000000,734.000000 -693.000000L664.000000 -616.000000C655.000000 -630.000000,609.000000 -705.000000,498.000000 -705.000000C275.000000 -705.000000,50.000000 -484.000000,50.000000 -252.000000C50.000000 -87.000000,168.000000 22.000000,321.000000 22.000000C408.000000 22.000000,484.000000 -18.000000,537.000000 -64.000000C630.000000 -146.000000,647.000000 -237.000000,647.000000 -240.000000C647.000000 -250.000000,637.000000 -250.000000,635.000000 -250.000000C629.000000 -250.000000,624.000000 -248.000000,622.000000 -240.000000C613.000000 -211.000000,590.000000 -140.000000,521.000000 -82.000000C452.000000 -26.000000,389.000000 -9.000000,337.000000 -9.000000C247.000000 -9.000000,141.000000 -61.000000,141.000000 -217.000000C141.000000 -274.000000,162.000000 -436.000000,262.000000 -553.000000C323.000000 -624.000000,417.000000 -674.000000,506.000000 -674.000000C608.000000 -674.000000,667.000000 -597.000000,667.000000 -481.000000C667.000000 -441.000000,664.000000 -440.000000,664.000000 -430.000000C664.000000 -420.000000,675.000000 -420.000000,679.000000 -420.000000C692.000000 -420.000000,692.000000 -422.000000,697.000000 -440.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmmi10_83">
      <path style="fill-rule: evenodd;" d="M645.000000 -695.000000C645.000000 -698.000000,643.000000 -705.000000,634.000000 -705.000000C629.000000 -705.000000,628.000000 -704.000000,616.000000 -690.000000L568.000000 -633.000000C542.000000 -680.000000,490.000000 -705.000000,425.000000 -705.000000C298.000000 -705.000000,178.000000 -590.000000,178.000000 -469.000000C178.000000 -388.000000,231.000000 -342.000000,282.000000 -327.000000L389.000000 -299.000000C426.000000 -290.000000,481.000000 -275.000000,481.000000 -193.000000C481.000000 -103.000000,399.000000 -9.000000,301.000000 -9.000000C237.000000 -9.000000,126.000000 -31.000000,126.000000 -155.000000C126.000000 -179.000000,131.000000 -203.000000,132.000000 -209.000000C133.000000 -213.000000,134.000000 -214.000000,134.000000 -216.000000C134.000000 -226.000000,127.000000 -227.000000,122.000000 -227.000000C117.000000 -227.000000,115.000000 -226.000000,112.000000 -223.000000C108.000000 -219.000000,52.000000 9.000000,52.000000 12.000000C52.000000 18.000000,57.000000 22.000000,63.000000 22.000000C68.000000 22.000000,69.000000 21.000000,81.000000 7.000000L130.000000 -50.000000C173.000000 8.000000,241.000000 22.000000,299.000000 22.000000C435.000000 22.000000,553.000000 -111.000000,553.000000 -235.000000C553.000000 -304.000000,519.000000 -338.000000,504.000000 -352.000000C481.000000 -375.000000,466.000000 -379.000000,377.000000 -402.000000C355.000000 -408.000000,319.000000 -418.000000,310.000000 -420.000000C283.000000 -429.000000,249.000000 -458.000000,249.000000 -511.000000C249.000000 -592.000000,329.000000 -677.000000,424.000000 -677.000000C507.000000 -677.000000,568.000000 -634.000000,568.000000 -522.000000C568.000000 -490.000000,564.000000 -472.000000,564.000000 -466.000000C564.000000 -465.000000,564.000000 -456.000000,576.000000 -456.000000C586.000000 -456.000000,587.000000 -459.000000,591.000000 -476.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHcmmi10_112">
      <path style="fill-rule: evenodd;" d="M45.000000 122.000000C37.000000 156.000000,35.000000 163.000000,-9.000000 163.000000C-21.000000 163.000000,-32.000000 163.000000,-32.000000 182.000000C-32.000000 190.000000,-27.000000 194.000000,-19.000000 194.000000L65.000000 194.000000L8.000000 194.000000L37.000000 191.000000L65.000000 191.000000L98.000000 191.000000L132.000000 194.000000L164.000000 194.000000C169.000000 194.000000,182.000000 194.000000,182.000000 174.000000C182.000000 163.000000,172.000000 163.000000,158.000000 163.000000C108.000000 163.000000,108.000000 156.000000,108.000000 147.000000C108.000000 135.000000,150.000000 -28.000000,157.000000 -53.000000C170.000000 -24.000000,198.000000 11.000000,249.000000 11.000000C365.000000 11.000000,490.000000 -135.000000,490.000000 -282.000000C490.000000 -376.000000,433.000000 -442.000000,357.000000 -442.000000C307.000000 -442.000000,259.000000 -406.000000,226.000000 -367.000000C216.000000 -421.000000,173.000000 -442.000000,136.000000 -442.000000C90.000000 -442.000000,71.000000 -403.000000,62.000000 -385.000000C44.000000 -351.000000,31.000000 -291.000000,31.000000 -288.000000C31.000000 -278.000000,41.000000 -278.000000,43.000000 -278.000000C53.000000 -278.000000,54.000000 -279.000000,60.000000 -301.000000C77.000000 -372.000000,97.000000 -420.000000,133.000000 -420.000000C150.000000 -420.000000,164.000000 -412.000000,164.000000 -374.000000C164.000000 -351.000000,161.000000 -340.000000,157.000000 -323.000000M221.000000 -312.000000C228.000000 -339.000000,255.000000 -367.000000,273.000000 -382.000000C308.000000 -413.000000,337.000000 -420.000000,354.000000 -420.000000C394.000000 -420.000000,418.000000 -385.000000,418.000000 -326.000000C418.000000 -267.000000,385.000000 -152.000000,367.000000 -114.000000C333.000000 -44.000000,285.000000 -11.000000,248.000000 -11.000000C182.000000 -11.000000,169.000000 -94.000000,169.000000 -100.000000C169.000000 -102.000000,169.000000 -104.000000,172.000000 -116.000000"></path>
    </g>
    <g transform="scale(0.009963,0.009963)" id="GLYPHptmr8r_61">
      <path style="fill-rule: evenodd;" d="M534.000000 -386.000000L30.000000 -386.000000L30.000000 -320.000000L534.000000 -320.000000M534.000000 -186.000000L30.000000 -186.000000L30.000000 -120.000000L534.000000 -120.000000"></path>
    </g>
  </defs>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,0.918396 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi10_112"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,8.938278 13.556976)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_118"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,20.496887 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHptmr8r_61"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,33.472137 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi10_83"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,43.246567 13.556976)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_121"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,54.450928 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmsy10_1"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,62.421051 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi10_67"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,73.813889 13.556976)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi7_121"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,85.903687 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_61"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,102.729507 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_48"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,110.699631 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmmi10_58"></use>
  </g>
  <g transform="matrix(1.600006,-0.000000,-0.000000,1.600006,115.127472 11.165924)" style="fill: rgb(0.000000%,0.000000%,0.000000%);">
    <use xlink:href="#GLYPHcmr10_48"></use>
  </g>
</svg></span>. Further
information can be found in the section “Further Limitations Related
to Specific Camera Types” of <a href="toc_calibration.html">Calibration</a>.</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>多线程类型:可重入(与非独占操作符并行运行)。</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  <li>未经并行化处理。</li>
</ul>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="NX" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NX</span><span data-if="c" style="display:none">NX</span><span data-if="cpp" style="display:none">NX</span><span data-if="com" style="display:none">NX</span><span data-if="dotnet" style="display:none">NX</span><span data-if="python" style="display:none">nx</span></code></b> (input_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all x coordinates
of the calibration marks (in meters).</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NY" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NY</span><span data-if="c" style="display:none">NY</span><span data-if="cpp" style="display:none">NY</span><span data-if="com" style="display:none">NY</span><span data-if="dotnet" style="display:none">NY</span><span data-if="python" style="display:none">ny</span></code></b> (input_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all y coordinates
of the calibration marks (in meters).</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>NY == NX</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NZ" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NZ</span><span data-if="c" style="display:none">NZ</span><span data-if="cpp" style="display:none">NZ</span><span data-if="com" style="display:none">NZ</span><span data-if="dotnet" style="display:none">NZ</span><span data-if="python" style="display:none">nz</span></code></b> (input_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all z coordinates
of the calibration marks (in meters).</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>NZ == NX</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NRow" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NRow</span><span data-if="c" style="display:none">NRow</span><span data-if="cpp" style="display:none">NRow</span><span data-if="com" style="display:none">NRow</span><span data-if="dotnet" style="display:none">NRow</span><span data-if="python" style="display:none">nrow</span></code></b> (input_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all row coordinates
of the extracted calibration marks (in pixels).</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NCol" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NCol</span><span data-if="c" style="display:none">NCol</span><span data-if="cpp" style="display:none">NCol</span><span data-if="com" style="display:none">NCol</span><span data-if="dotnet" style="display:none">NCol</span><span data-if="python" style="display:none">ncol</span></code></b> (input_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all column coordinates
of the extracted calibration marks (in pixels).</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>NCol == NRow</p>
</div>
  <div class="par">
<div class="parhead">
<span id="StartCamParam" class="parname"><b><code><span data-if="hdevelop" style="display:inline">StartCamParam</span><span data-if="c" style="display:none">StartCamParam</span><span data-if="cpp" style="display:none">StartCamParam</span><span data-if="com" style="display:none">StartCamParam</span><span data-if="dotnet" style="display:none">startCamParam</span><span data-if="python" style="display:none">start_cam_param</span></code></b> (input_control)  </span><span>campar <code>→</code> <span data-if="dotnet" style="display:none"><a href="HCamPar.html">HCamPar</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int, str]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer / </span><span data-if="hdevelop" style="display:inline">string)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long / </span><span data-if="dotnet" style="display:none">string)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong / </span><span data-if="cpp" style="display:none">HString)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong / </span><span data-if="c" style="display:none">char*)</span></span>
</div>
<p class="pardesc">Initial values for the internal camera parameters.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NStartPose" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NStartPose</span><span data-if="c" style="display:none">NStartPose</span><span data-if="cpp" style="display:none">NStartPose</span><span data-if="com" style="display:none">NStartPose</span><span data-if="dotnet" style="display:none">NStartPose</span><span data-if="python" style="display:none">nstart_pose</span></code></b> (input_control)  </span><span>pose(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HPose.html">HPose</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all initial values for the
external camera parameters.</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>NStartPose == 7 * NRow / NX</p>
</div>
  <div class="par">
<div class="parhead">
<span id="EstimateParams" class="parname"><b><code><span data-if="hdevelop" style="display:inline">EstimateParams</span><span data-if="c" style="display:none">EstimateParams</span><span data-if="cpp" style="display:none">EstimateParams</span><span data-if="com" style="display:none">EstimateParams</span><span data-if="dotnet" style="display:none">estimateParams</span><span data-if="python" style="display:none">estimate_params</span></code></b> (input_control)  </span><span>string-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Camera parameters to be estimated.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'all'</span>
    <span data-if="c" style="display:none">"all"</span>
    <span data-if="cpp" style="display:none">"all"</span>
    <span data-if="com" style="display:none">"all"</span>
    <span data-if="dotnet" style="display:none">"all"</span>
    <span data-if="python" style="display:none">"all"</span>
</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'all'</span><span data-if="c" style="display:none">"all"</span><span data-if="cpp" style="display:none">"all"</span><span data-if="com" style="display:none">"all"</span><span data-if="dotnet" style="display:none">"all"</span><span data-if="python" style="display:none">"all"</span>, <span data-if="hdevelop" style="display:inline">'alpha'</span><span data-if="c" style="display:none">"alpha"</span><span data-if="cpp" style="display:none">"alpha"</span><span data-if="com" style="display:none">"alpha"</span><span data-if="dotnet" style="display:none">"alpha"</span><span data-if="python" style="display:none">"alpha"</span>, <span data-if="hdevelop" style="display:inline">'beta'</span><span data-if="c" style="display:none">"beta"</span><span data-if="cpp" style="display:none">"beta"</span><span data-if="com" style="display:none">"beta"</span><span data-if="dotnet" style="display:none">"beta"</span><span data-if="python" style="display:none">"beta"</span>, <span data-if="hdevelop" style="display:inline">'camera'</span><span data-if="c" style="display:none">"camera"</span><span data-if="cpp" style="display:none">"camera"</span><span data-if="com" style="display:none">"camera"</span><span data-if="dotnet" style="display:none">"camera"</span><span data-if="python" style="display:none">"camera"</span>, <span data-if="hdevelop" style="display:inline">'cx'</span><span data-if="c" style="display:none">"cx"</span><span data-if="cpp" style="display:none">"cx"</span><span data-if="com" style="display:none">"cx"</span><span data-if="dotnet" style="display:none">"cx"</span><span data-if="python" style="display:none">"cx"</span>, <span data-if="hdevelop" style="display:inline">'cy'</span><span data-if="c" style="display:none">"cy"</span><span data-if="cpp" style="display:none">"cy"</span><span data-if="com" style="display:none">"cy"</span><span data-if="dotnet" style="display:none">"cy"</span><span data-if="python" style="display:none">"cy"</span>, <span data-if="hdevelop" style="display:inline">'focus'</span><span data-if="c" style="display:none">"focus"</span><span data-if="cpp" style="display:none">"focus"</span><span data-if="com" style="display:none">"focus"</span><span data-if="dotnet" style="display:none">"focus"</span><span data-if="python" style="display:none">"focus"</span>, <span data-if="hdevelop" style="display:inline">'gamma'</span><span data-if="c" style="display:none">"gamma"</span><span data-if="cpp" style="display:none">"gamma"</span><span data-if="com" style="display:none">"gamma"</span><span data-if="dotnet" style="display:none">"gamma"</span><span data-if="python" style="display:none">"gamma"</span>, <span data-if="hdevelop" style="display:inline">'image_plane_dist'</span><span data-if="c" style="display:none">"image_plane_dist"</span><span data-if="cpp" style="display:none">"image_plane_dist"</span><span data-if="com" style="display:none">"image_plane_dist"</span><span data-if="dotnet" style="display:none">"image_plane_dist"</span><span data-if="python" style="display:none">"image_plane_dist"</span>, <span data-if="hdevelop" style="display:inline">'k1'</span><span data-if="c" style="display:none">"k1"</span><span data-if="cpp" style="display:none">"k1"</span><span data-if="com" style="display:none">"k1"</span><span data-if="dotnet" style="display:none">"k1"</span><span data-if="python" style="display:none">"k1"</span>, <span data-if="hdevelop" style="display:inline">'k2'</span><span data-if="c" style="display:none">"k2"</span><span data-if="cpp" style="display:none">"k2"</span><span data-if="com" style="display:none">"k2"</span><span data-if="dotnet" style="display:none">"k2"</span><span data-if="python" style="display:none">"k2"</span>, <span data-if="hdevelop" style="display:inline">'k3'</span><span data-if="c" style="display:none">"k3"</span><span data-if="cpp" style="display:none">"k3"</span><span data-if="com" style="display:none">"k3"</span><span data-if="dotnet" style="display:none">"k3"</span><span data-if="python" style="display:none">"k3"</span>, <span data-if="hdevelop" style="display:inline">'kappa'</span><span data-if="c" style="display:none">"kappa"</span><span data-if="cpp" style="display:none">"kappa"</span><span data-if="com" style="display:none">"kappa"</span><span data-if="dotnet" style="display:none">"kappa"</span><span data-if="python" style="display:none">"kappa"</span>, <span data-if="hdevelop" style="display:inline">'magnification'</span><span data-if="c" style="display:none">"magnification"</span><span data-if="cpp" style="display:none">"magnification"</span><span data-if="com" style="display:none">"magnification"</span><span data-if="dotnet" style="display:none">"magnification"</span><span data-if="python" style="display:none">"magnification"</span>, <span data-if="hdevelop" style="display:inline">'poly'</span><span data-if="c" style="display:none">"poly"</span><span data-if="cpp" style="display:none">"poly"</span><span data-if="com" style="display:none">"poly"</span><span data-if="dotnet" style="display:none">"poly"</span><span data-if="python" style="display:none">"poly"</span>, <span data-if="hdevelop" style="display:inline">'poly_tan_2'</span><span data-if="c" style="display:none">"poly_tan_2"</span><span data-if="cpp" style="display:none">"poly_tan_2"</span><span data-if="com" style="display:none">"poly_tan_2"</span><span data-if="dotnet" style="display:none">"poly_tan_2"</span><span data-if="python" style="display:none">"poly_tan_2"</span>, <span data-if="hdevelop" style="display:inline">'pose'</span><span data-if="c" style="display:none">"pose"</span><span data-if="cpp" style="display:none">"pose"</span><span data-if="com" style="display:none">"pose"</span><span data-if="dotnet" style="display:none">"pose"</span><span data-if="python" style="display:none">"pose"</span>, <span data-if="hdevelop" style="display:inline">'sx'</span><span data-if="c" style="display:none">"sx"</span><span data-if="cpp" style="display:none">"sx"</span><span data-if="com" style="display:none">"sx"</span><span data-if="dotnet" style="display:none">"sx"</span><span data-if="python" style="display:none">"sx"</span>, <span data-if="hdevelop" style="display:inline">'sy'</span><span data-if="c" style="display:none">"sy"</span><span data-if="cpp" style="display:none">"sy"</span><span data-if="com" style="display:none">"sy"</span><span data-if="dotnet" style="display:none">"sy"</span><span data-if="python" style="display:none">"sy"</span>, <span data-if="hdevelop" style="display:inline">'tilt'</span><span data-if="c" style="display:none">"tilt"</span><span data-if="cpp" style="display:none">"tilt"</span><span data-if="com" style="display:none">"tilt"</span><span data-if="dotnet" style="display:none">"tilt"</span><span data-if="python" style="display:none">"tilt"</span>, <span data-if="hdevelop" style="display:inline">'transx'</span><span data-if="c" style="display:none">"transx"</span><span data-if="cpp" style="display:none">"transx"</span><span data-if="com" style="display:none">"transx"</span><span data-if="dotnet" style="display:none">"transx"</span><span data-if="python" style="display:none">"transx"</span>, <span data-if="hdevelop" style="display:inline">'transy'</span><span data-if="c" style="display:none">"transy"</span><span data-if="cpp" style="display:none">"transy"</span><span data-if="com" style="display:none">"transy"</span><span data-if="dotnet" style="display:none">"transy"</span><span data-if="python" style="display:none">"transy"</span>, <span data-if="hdevelop" style="display:inline">'transz'</span><span data-if="c" style="display:none">"transz"</span><span data-if="cpp" style="display:none">"transz"</span><span data-if="com" style="display:none">"transz"</span><span data-if="dotnet" style="display:none">"transz"</span><span data-if="python" style="display:none">"transz"</span>, <span data-if="hdevelop" style="display:inline">'vx'</span><span data-if="c" style="display:none">"vx"</span><span data-if="cpp" style="display:none">"vx"</span><span data-if="com" style="display:none">"vx"</span><span data-if="dotnet" style="display:none">"vx"</span><span data-if="python" style="display:none">"vx"</span>, <span data-if="hdevelop" style="display:inline">'vy'</span><span data-if="c" style="display:none">"vy"</span><span data-if="cpp" style="display:none">"vy"</span><span data-if="com" style="display:none">"vy"</span><span data-if="dotnet" style="display:none">"vy"</span><span data-if="python" style="display:none">"vy"</span>, <span data-if="hdevelop" style="display:inline">'vz'</span><span data-if="c" style="display:none">"vz"</span><span data-if="cpp" style="display:none">"vz"</span><span data-if="com" style="display:none">"vz"</span><span data-if="dotnet" style="display:none">"vz"</span><span data-if="python" style="display:none">"vz"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="CameraParam" class="parname"><b><code><span data-if="hdevelop" style="display:inline">CameraParam</span><span data-if="c" style="display:none">CameraParam</span><span data-if="cpp" style="display:none">CameraParam</span><span data-if="com" style="display:none">CameraParam</span><span data-if="dotnet" style="display:none">cameraParam</span><span data-if="python" style="display:none">camera_param</span></code></b> (output_control)  </span><span>campar <code>→</code> <span data-if="dotnet" style="display:none"><a href="HCamPar.html">HCamPar</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int, str]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer / </span><span data-if="hdevelop" style="display:inline">string)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long / </span><span data-if="dotnet" style="display:none">string)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong / </span><span data-if="cpp" style="display:none">HString)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong / </span><span data-if="c" style="display:none">char*)</span></span>
</div>
<p class="pardesc">Internal camera parameters.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NFinalPose" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NFinalPose</span><span data-if="c" style="display:none">NFinalPose</span><span data-if="cpp" style="display:none">NFinalPose</span><span data-if="com" style="display:none">NFinalPose</span><span data-if="dotnet" style="display:none">NFinalPose</span><span data-if="python" style="display:none">nfinal_pose</span></code></b> (output_control)  </span><span>pose(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HPose.html">HPose</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Ordered tuple with all external camera parameters.</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>NFinalPose == 7 * NRow / NX</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Errors" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Errors</span><span data-if="c" style="display:none">Errors</span><span data-if="cpp" style="display:none">Errors</span><span data-if="com" style="display:none">Errors</span><span data-if="dotnet" style="display:none">errors</span><span data-if="python" style="display:none">errors</span></code></b> (output_control)  </span><span>real(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Average error distance in pixels.</p>
</div>
<div data-if="hdevelop" style="display:inline">
<h2 id="sec_example_hdevelop">例程 (HDevelop)</h2>
<pre class="example">
* Read calibration images.
read_image(Image1, 'calib/grid_space.cal.k.000')
read_image(Image2, 'calib/grid_space.cal.k.001')
read_image(Image3, 'calib/grid_space.cal.k.002')
*  Find calibration pattern.
find_caltab(Image1, CalPlate1, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image2, CalPlate2, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image3, CalPlate3, 'caltab_big.descr', 3, 112, 5)
*  Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
                384, 288, 768, 576]
find_marks_and_pose(Image1, CalPlate1, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, CalPlate2, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, CalPlate3, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
                    StartPose3)
*  Read 3D positions of calibration marks.
caltab_points('caltab_big.descr', NX, NY, NZ)
*  Camera calibration.
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
                   [CCoord1, CCoord2, CCoord3], StartCamPar, \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  Write internal camera parameters to file.
write_cam_par(CameraParam, 'campar.dat')
</pre>
</div>
<div data-if="c" style="display:none">
<h2 id="sec_example_c">例程 (HDevelop)</h2>
<pre class="example">
* Read calibration images.
read_image(Image1, 'calib/grid_space.cal.k.000')
read_image(Image2, 'calib/grid_space.cal.k.001')
read_image(Image3, 'calib/grid_space.cal.k.002')
*  Find calibration pattern.
find_caltab(Image1, CalPlate1, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image2, CalPlate2, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image3, CalPlate3, 'caltab_big.descr', 3, 112, 5)
*  Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
                384, 288, 768, 576]
find_marks_and_pose(Image1, CalPlate1, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, CalPlate2, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, CalPlate3, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
                    StartPose3)
*  Read 3D positions of calibration marks.
caltab_points('caltab_big.descr', NX, NY, NZ)
*  Camera calibration.
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
                   [CCoord1, CCoord2, CCoord3], StartCamPar, \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  Write internal camera parameters to file.
write_cam_par(CameraParam, 'campar.dat')
</pre>
</div>
<div data-if="cpp" style="display:none">
<h2 id="sec_example_cpp">例程 (HDevelop)</h2>
<pre class="example">
* Read calibration images.
read_image(Image1, 'calib/grid_space.cal.k.000')
read_image(Image2, 'calib/grid_space.cal.k.001')
read_image(Image3, 'calib/grid_space.cal.k.002')
*  Find calibration pattern.
find_caltab(Image1, CalPlate1, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image2, CalPlate2, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image3, CalPlate3, 'caltab_big.descr', 3, 112, 5)
*  Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
                384, 288, 768, 576]
find_marks_and_pose(Image1, CalPlate1, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, CalPlate2, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, CalPlate3, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
                    StartPose3)
*  Read 3D positions of calibration marks.
caltab_points('caltab_big.descr', NX, NY, NZ)
*  Camera calibration.
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
                   [CCoord1, CCoord2, CCoord3], StartCamPar, \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  Write internal camera parameters to file.
write_cam_par(CameraParam, 'campar.dat')
</pre>
</div>
<div data-if="com" style="display:none">
<h2 id="sec_example_com">例程 (HDevelop)</h2>
<pre class="example">
* Read calibration images.
read_image(Image1, 'calib/grid_space.cal.k.000')
read_image(Image2, 'calib/grid_space.cal.k.001')
read_image(Image3, 'calib/grid_space.cal.k.002')
*  Find calibration pattern.
find_caltab(Image1, CalPlate1, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image2, CalPlate2, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image3, CalPlate3, 'caltab_big.descr', 3, 112, 5)
*  Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
                384, 288, 768, 576]
find_marks_and_pose(Image1, CalPlate1, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, CalPlate2, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, CalPlate3, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
                    StartPose3)
*  Read 3D positions of calibration marks.
caltab_points('caltab_big.descr', NX, NY, NZ)
*  Camera calibration.
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
                   [CCoord1, CCoord2, CCoord3], StartCamPar, \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  Write internal camera parameters to file.
write_cam_par(CameraParam, 'campar.dat')
</pre>
</div>
<div data-if="dotnet" style="display:none">
<h2 id="sec_example_dotnet">例程 (HDevelop)</h2>
<pre class="example">
* Read calibration images.
read_image(Image1, 'calib/grid_space.cal.k.000')
read_image(Image2, 'calib/grid_space.cal.k.001')
read_image(Image3, 'calib/grid_space.cal.k.002')
*  Find calibration pattern.
find_caltab(Image1, CalPlate1, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image2, CalPlate2, 'caltab_big.descr', 3, 112, 5)
find_caltab(Image3, CalPlate3, 'caltab_big.descr', 3, 112, 5)
*  Find calibration marks and start poses.
StartCamPar := ['area_scan_division', 0.008, 0.0, 0.000011, 0.000011, \
                384, 288, 768, 576]
find_marks_and_pose(Image1, CalPlate1, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord1, CCoord1, \
                    StartPose1)
find_marks_and_pose(Image2, CalPlate2, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord2, CCoord2, \
                    StartPose2)
find_marks_and_pose(Image3, CalPlate3, 'caltab_big.descr', StartCamPar, \
                    128, 10, 18, 0.9, 15.0, 100.0, RCoord3, CCoord3, \
                    StartPose3)
*  Read 3D positions of calibration marks.
caltab_points('caltab_big.descr', NX, NY, NZ)
*  Camera calibration.
camera_calibration(NX, NY, NZ, [RCoord1, RCoord2, RCoord3], \
                   [CCoord1, CCoord2, CCoord3], StartCamPar, \
                   [StartPose1, StartPose2, StartPose3], 'all', \
                   CameraParam, NFinalPose, Errors)
*  Write internal camera parameters to file.
write_cam_par(CameraParam, 'campar.dat')
</pre>
</div>
<h2 id="sec_result">结果</h2>
<p><code><span data-if="hdevelop" style="display:inline">camera_calibration</span><span data-if="c" style="display:none">camera_calibration</span><span data-if="cpp" style="display:none">CameraCalibration</span><span data-if="com" style="display:none">CameraCalibration</span><span data-if="dotnet" style="display:none">CameraCalibration</span><span data-if="python" style="display:none">camera_calibration</span></code> returns <TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
     if all parameter values are
correct and the desired camera parameters have been determined by
the minimization algorithm. 如有必要，将引发异常。</p>
<h2 id="sec_predecessors">可能的前置算子</h2>
<p>
<code><a href="find_marks_and_pose.html"><span data-if="hdevelop" style="display:inline">find_marks_and_pose</span><span data-if="c" style="display:none">find_marks_and_pose</span><span data-if="cpp" style="display:none">FindMarksAndPose</span><span data-if="com" style="display:none">FindMarksAndPose</span><span data-if="dotnet" style="display:none">FindMarksAndPose</span><span data-if="python" style="display:none">find_marks_and_pose</span></a></code>, 
<code><a href="caltab_points.html"><span data-if="hdevelop" style="display:inline">caltab_points</span><span data-if="c" style="display:none">caltab_points</span><span data-if="cpp" style="display:none">CaltabPoints</span><span data-if="com" style="display:none">CaltabPoints</span><span data-if="dotnet" style="display:none">CaltabPoints</span><span data-if="python" style="display:none">caltab_points</span></a></code>, 
<code><a href="read_cam_par.html"><span data-if="hdevelop" style="display:inline">read_cam_par</span><span data-if="c" style="display:none">read_cam_par</span><span data-if="cpp" style="display:none">ReadCamPar</span><span data-if="com" style="display:none">ReadCamPar</span><span data-if="dotnet" style="display:none">ReadCamPar</span><span data-if="python" style="display:none">read_cam_par</span></a></code>
</p>
<h2 id="sec_successors">可能的后置算子</h2>
<p>
<code><a href="write_pose.html"><span data-if="hdevelop" style="display:inline">write_pose</span><span data-if="c" style="display:none">write_pose</span><span data-if="cpp" style="display:none">WritePose</span><span data-if="com" style="display:none">WritePose</span><span data-if="dotnet" style="display:none">WritePose</span><span data-if="python" style="display:none">write_pose</span></a></code>, 
<code><a href="pose_to_hom_mat3d.html"><span data-if="hdevelop" style="display:inline">pose_to_hom_mat3d</span><span data-if="c" style="display:none">pose_to_hom_mat3d</span><span data-if="cpp" style="display:none">PoseToHomMat3d</span><span data-if="com" style="display:none">PoseToHomMat3d</span><span data-if="dotnet" style="display:none">PoseToHomMat3d</span><span data-if="python" style="display:none">pose_to_hom_mat3d</span></a></code>, 
<code><a href="disp_caltab.html"><span data-if="hdevelop" style="display:inline">disp_caltab</span><span data-if="c" style="display:none">disp_caltab</span><span data-if="cpp" style="display:none">DispCaltab</span><span data-if="com" style="display:none">DispCaltab</span><span data-if="dotnet" style="display:none">DispCaltab</span><span data-if="python" style="display:none">disp_caltab</span></a></code>, 
<code><a href="sim_caltab.html"><span data-if="hdevelop" style="display:inline">sim_caltab</span><span data-if="c" style="display:none">sim_caltab</span><span data-if="cpp" style="display:none">SimCaltab</span><span data-if="com" style="display:none">SimCaltab</span><span data-if="dotnet" style="display:none">SimCaltab</span><span data-if="python" style="display:none">sim_caltab</span></a></code>
</p>
<h2 id="sec_alternatives">可替代算子</h2>
<p>
<code><a href="calibrate_cameras.html"><span data-if="hdevelop" style="display:inline">calibrate_cameras</span><span data-if="c" style="display:none">calibrate_cameras</span><span data-if="cpp" style="display:none">CalibrateCameras</span><span data-if="com" style="display:none">CalibrateCameras</span><span data-if="dotnet" style="display:none">CalibrateCameras</span><span data-if="python" style="display:none">calibrate_cameras</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="find_caltab.html"><span data-if="hdevelop" style="display:inline">find_caltab</span><span data-if="c" style="display:none">find_caltab</span><span data-if="cpp" style="display:none">FindCaltab</span><span data-if="com" style="display:none">FindCaltab</span><span data-if="dotnet" style="display:none">FindCaltab</span><span data-if="python" style="display:none">find_caltab</span></a></code>, 
<code><a href="find_marks_and_pose.html"><span data-if="hdevelop" style="display:inline">find_marks_and_pose</span><span data-if="c" style="display:none">find_marks_and_pose</span><span data-if="cpp" style="display:none">FindMarksAndPose</span><span data-if="com" style="display:none">FindMarksAndPose</span><span data-if="dotnet" style="display:none">FindMarksAndPose</span><span data-if="python" style="display:none">find_marks_and_pose</span></a></code>, 
<code><a href="disp_caltab.html"><span data-if="hdevelop" style="display:inline">disp_caltab</span><span data-if="c" style="display:none">disp_caltab</span><span data-if="cpp" style="display:none">DispCaltab</span><span data-if="com" style="display:none">DispCaltab</span><span data-if="dotnet" style="display:none">DispCaltab</span><span data-if="python" style="display:none">disp_caltab</span></a></code>, 
<code><a href="sim_caltab.html"><span data-if="hdevelop" style="display:inline">sim_caltab</span><span data-if="c" style="display:none">sim_caltab</span><span data-if="cpp" style="display:none">SimCaltab</span><span data-if="com" style="display:none">SimCaltab</span><span data-if="dotnet" style="display:none">SimCaltab</span><span data-if="python" style="display:none">sim_caltab</span></a></code>, 
<code><a href="write_cam_par.html"><span data-if="hdevelop" style="display:inline">write_cam_par</span><span data-if="c" style="display:none">write_cam_par</span><span data-if="cpp" style="display:none">WriteCamPar</span><span data-if="com" style="display:none">WriteCamPar</span><span data-if="dotnet" style="display:none">WriteCamPar</span><span data-if="python" style="display:none">write_cam_par</span></a></code>, 
<code><a href="read_cam_par.html"><span data-if="hdevelop" style="display:inline">read_cam_par</span><span data-if="c" style="display:none">read_cam_par</span><span data-if="cpp" style="display:none">ReadCamPar</span><span data-if="com" style="display:none">ReadCamPar</span><span data-if="dotnet" style="display:none">ReadCamPar</span><span data-if="python" style="display:none">read_cam_par</span></a></code>, 
<code><a href="create_pose.html"><span data-if="hdevelop" style="display:inline">create_pose</span><span data-if="c" style="display:none">create_pose</span><span data-if="cpp" style="display:none">CreatePose</span><span data-if="com" style="display:none">CreatePose</span><span data-if="dotnet" style="display:none">CreatePose</span><span data-if="python" style="display:none">create_pose</span></a></code>, 
<code><a href="convert_pose_type.html"><span data-if="hdevelop" style="display:inline">convert_pose_type</span><span data-if="c" style="display:none">convert_pose_type</span><span data-if="cpp" style="display:none">ConvertPoseType</span><span data-if="com" style="display:none">ConvertPoseType</span><span data-if="dotnet" style="display:none">ConvertPoseType</span><span data-if="python" style="display:none">convert_pose_type</span></a></code>, 
<code><a href="write_pose.html"><span data-if="hdevelop" style="display:inline">write_pose</span><span data-if="c" style="display:none">write_pose</span><span data-if="cpp" style="display:none">WritePose</span><span data-if="com" style="display:none">WritePose</span><span data-if="dotnet" style="display:none">WritePose</span><span data-if="python" style="display:none">write_pose</span></a></code>, 
<code><a href="read_pose.html"><span data-if="hdevelop" style="display:inline">read_pose</span><span data-if="c" style="display:none">read_pose</span><span data-if="cpp" style="display:none">ReadPose</span><span data-if="com" style="display:none">ReadPose</span><span data-if="dotnet" style="display:none">ReadPose</span><span data-if="python" style="display:none">read_pose</span></a></code>, 
<code><a href="pose_to_hom_mat3d.html"><span data-if="hdevelop" style="display:inline">pose_to_hom_mat3d</span><span data-if="c" style="display:none">pose_to_hom_mat3d</span><span data-if="cpp" style="display:none">PoseToHomMat3d</span><span data-if="com" style="display:none">PoseToHomMat3d</span><span data-if="dotnet" style="display:none">PoseToHomMat3d</span><span data-if="python" style="display:none">pose_to_hom_mat3d</span></a></code>, 
<code><a href="hom_mat3d_to_pose.html"><span data-if="hdevelop" style="display:inline">hom_mat3d_to_pose</span><span data-if="c" style="display:none">hom_mat3d_to_pose</span><span data-if="cpp" style="display:none">HomMat3dToPose</span><span data-if="com" style="display:none">HomMat3dToPose</span><span data-if="dotnet" style="display:none">HomMat3dToPose</span><span data-if="python" style="display:none">hom_mat3d_to_pose</span></a></code>, 
<code><a href="caltab_points.html"><span data-if="hdevelop" style="display:inline">caltab_points</span><span data-if="c" style="display:none">caltab_points</span><span data-if="cpp" style="display:none">CaltabPoints</span><span data-if="com" style="display:none">CaltabPoints</span><span data-if="dotnet" style="display:none">CaltabPoints</span><span data-if="python" style="display:none">caltab_points</span></a></code>, 
<code><a href="gen_caltab.html"><span data-if="hdevelop" style="display:inline">gen_caltab</span><span data-if="c" style="display:none">gen_caltab</span><span data-if="cpp" style="display:none">GenCaltab</span><span data-if="com" style="display:none">GenCaltab</span><span data-if="dotnet" style="display:none">GenCaltab</span><span data-if="python" style="display:none">gen_caltab</span></a></code>, 
<code><a href="calibrate_cameras.html"><span data-if="hdevelop" style="display:inline">calibrate_cameras</span><span data-if="c" style="display:none">calibrate_cameras</span><span data-if="cpp" style="display:none">CalibrateCameras</span><span data-if="com" style="display:none">CalibrateCameras</span><span data-if="dotnet" style="display:none">CalibrateCameras</span><span data-if="python" style="display:none">calibrate_cameras</span></a></code>
</p>
<h2 id="sec_module">模块</h2>
<p>
Calibration</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
